这种情况下需要releasemutex吗?(50分)

  • 主题发起人 主题发起人 kjzzn
  • 开始时间 开始时间
K

kjzzn

Unregistered / Unconfirmed
GUEST, unregistred user!
在看一些防止程序第二次运行的代码时,发现会有稍微的不同。
例一:
var
hAppMutex: THandle;
begin
Application.Initialize;
hAppMutex := CreateMutex(nil, false, PChar('asdfghjkl'));
if (hAppMutex = 0) then
exit;
if (hAppMutex <> 0) and (GetLastError() = ERROR_ALREADY_EXISTS) then
begin
releasemutex(hAppMutex);
Exit;
end;
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm:=False;
Application.Run;
CloseHandle(hAppMutex);
例二:
var
hAppMutex: THandle;
begin
Application.Initialize;
hAppMutex := CreateMutex(nil, false, PChar('asdfghjkl'));
if (hAppMutex = 0) or (GetLastError() = ERROR_ALREADY_EXISTS) then
Exit;
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm:=False;
Application.Run;
CloseHandle(hAppMutex);
比较发现差一个 releasemutex(hAppMutex);
测试时发现没有什么不同,这里releasemutex是必须的么?请高手指点
 
他们的条件不一样啊,但读着好像是没必要,没有接触过啊。
 
查返回值,看看是否正常关闭
 
Release是对的。因为如果有同名的Mutex对象存在CreateMutex调用相当于OpenMutex调用会返回一个有效Handle。所以要Release。
 
接受答案了.
 
后退
顶部