同一个程序,重复运行,CreateMutex返回的不是0,请指点下

EDDGA 2010-11-26 10:05:55
代码:

program Aabb;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Windows,
Dialogs,
SysUtils;

{$R *.res}

var mutex: THandle;
var flag_existence: Integer;

begin
Application.Initialize;

mutex := CreateMutex(nil, False, PChar(Aabb)); //建立互斥对象
flag_existence := GetLastError();

ShowMessage(IntToStr(mutex));

try
if (mutex = 0) then
begin
ShowMessage('已有相同实例在运行');
end else if (mutex <> 0) then
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
finally
ReleaseMutex(mutex);
CloseHandle(mutex);
end;

end.


网上教程说“Long,如执行成功,就返回互斥体对象的句柄;零表示出错

重复运行多次,mutex每次都是一个非0数,而且是同一个数;而如果用flag_existence则能正常阻止重复运行。

请指点下这个mutex应该才会返回0
...全文
176 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
EDDGA 2010-12-05
  • 打赏
  • 举报
回复
谢谢各位,受教了
rainychan2009 2010-12-04
  • 打赏
  • 举报
回复
GUID命名高见
Think-In-C 2010-12-02
  • 打赏
  • 举报
回复
确实,GUID,正解。
ZyxIp 2010-11-30
  • 打赏
  • 举报
回复
用GUID串来区分肯定不会错啦。
JPEXE 2010-11-30
  • 打赏
  • 举报
回复
mutex := CreateMutex(nil, False, PChar(Application.Title))
iqyely 2010-11-30
  • 打赏
  • 举报
回复
来学习下了
JPEXE 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 h98458 的回复:]
不建议用互质对象,万一有人用程序也做了一个和你一样的互质变量,先比你运行,你的程序就启动不了了
建议用查找窗口的办法:
……
[/Quote]
使用窗体类名的话,同样可能遭遇同名问题,而使互斥对象时第三个参数用一个GUID串就不用担心遇到同名了。
h98458 2010-11-30
  • 打赏
  • 举报
回复
不建议用互质对象,万一有人用程序也做了一个和你一样的互质变量,先比你运行,你的程序就启动不了了
建议用查找窗口的办法:
...
...
var
RvHandle:THandle;
begin
//防止程序重复运行
RvHandle:=FindWindow('Tfrm_Main', nil);
if RvHandle = 0 then
begin
Application.Initialize;
Application.CreateForm(Tfrm_Main, frmMain);
Application.Run;
end;
end.
sunli_py 2010-11-29
  • 打赏
  • 举报
回复
rz中有一个控件可以很好解决
huangjacky 2010-11-29
  • 打赏
  • 举报
回复
mutex := CreateMutex(nil, False, PChar(Aabb))
这句话错了
你这个Aabb是你的app的地址 根本不是一个字符串。
程序没有报错算好的。
dinoalex 2010-11-26
  • 打赏
  • 举报
回复

var
hMutex: THandle;
const
TheName = 'abc';

begin
if OpenMutex(MUTEX_ALL_ACCESS, False, TheName) <> 0 then
begin
MessageBox(0, '本程式已有一实例在运行中', '提示', MB_OK);
Application.Terminate;
end else
begin
hMutex := CreateMutex(nil, False, TheName);
Application.Initialize;
....
end;

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧