?? mutex.pas
字號:
unit mutex;
interface
uses Windows, SysUtils;
function GetExclusivity(const Name: string): boolean;
procedure ReleaseExclusivity(const Name: string);
implementation
uses Classes;
var
HeldHandles: TStringList;
function GetExclusivity(const Name: string): boolean;
var
res: HResult;
begin
res := CreateMutex(nil,true,pchar(Name));
if (res = 0) or (GetLastError = ERROR_ALREADY_EXISTS) then
begin
result := false;
exit;
end
else
begin
HeldHandles.AddObject(Name,TObject(res));
result := true;
end;
end;
procedure ReleaseExclusivity(const Name: string);
var
idx: integer;
begin
idx := HeldHandles.IndexOf(Name);
if idx = -1 then
raise exception.create('We do not hold this handle');
CloseHandle(integer(HeldHandles.Objects[idx]));
HeldHandles.Delete(idx);
end;
initialization
HeldHandles := TStringList.Create;
finalization
HeldHandles.Free;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -