首页 > 代码库 > 【温故Delphi】Win32API之CreateMutex
【温故Delphi】Win32API之CreateMutex
解决问题
如何让一个软件在一台机器上只能运行一个实例呢?这个问题用专业术语就是进程互斥。这个问题可以通过CreateMutex来解决。
进程互斥的核心思想:进程在启动时首先检查是否存在此进程实例,如果没有则创建进程并设置进程实例已存在的标记。
CreateMutex用于创建一个互斥体;
OpenMutex为现有的一个已命名互斥体对象创建一个新句柄;
ReleaseMutex释放由线程拥有的一个互斥体的控制权。
具体实现代码如下:
1 constructor TUniqueAppInstance.Create(AUniqueAppStr: string); 2 begin 3 inherited Create; 5 FMutHandle := OpenMutex(MUTEX_ALL_ACCESS, False, PChar(AUniqueAppStr)); 6 // 互斥对象已建立,说明已有实例存在 7 if FMutHandle <> 0 then 8 raise Exception.Create(‘当前应用程序已经运行‘) 9 else10 FMutHandle := CreateMutex(nil, False, PChar(AUniqueAppStr));11 end;
API说明
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针
BOOL bInitialOwner, // 初始化互斥对象的所有者
LPCTSTR lpName // 指向互斥对象名的指针
);
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。