大家好,又见面了,我是你们的朋友全栈君。
功能:
CreateMutex() 用于有独占要求的程序 (在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行)。
比如运行金山词霸时,一次只能运行一个实例,当运行第二个实例时,实际上是激活第一个实例,将其带到最顶层。
原型:
1 HANDLE CreateMutex( 2 LPSECURITY_ATTRIBUTES lpMutexAttributes, 3 BOOL bInitialOwner, 4 LPCTSTR lpName 5 );
参数:
lpMutexAttributes:必须为NULL
bInitialOwner:如果为TRUE,调用互斥对象的线程获得互斥对象的所有权
如果为FALSE,则不拥有
lpName:如果lpName跟一个已存在的事件、信号、文件映射对象匹配,即命名的互斥对象已存在,则CreateMutex函数失败,GetLastError()返回ERROR_INVALID_HANDLE。
注解:
未采取这个措施,就会将这个互斥体标记为废弃,并自动释放所有权。共享这个互斥体的其他
应用程序也许仍然能够用它,但会接收到一个废弃状态信息,指出上一个所有进程未能正常关闭。
代码:
1 BOOL CBBBApp::SetMutex() 2 { 3 BOOL bFound = FALSE; 4 5 HANDLE hMutexOneInstance = ::CreateMutex(NULL, TRUE, _T("MutexBBB")); 6 7 if (::GetLastError() == ERROR_ALREADY_EXISTS) 8 { 9 TRACE(_T("Instance对象已存在")); 10 11 bFound = TRUE; 12 CloseHandle(hMutexOneInstance); 13 hMutexOneInstance = NULL; 14 } 15 16 if (hMutexOneInstance) 17 { 18 ::ReleaseMutex(hMutexOneInstance); 19 } 20 21 if (bFound) 22 { 23 return FALSE; 24 } 25 26 return TRUE; 27 }
转载于:https://www.cnblogs.com/SnailProgramer/p/4235310.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153180.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...