大家好,又见面了,我是你们的朋友全栈君。
功能:
CreateMutex() 用于有独占要求的程序 (在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行)。
比如运行金山词霸时,一次只能运行一个实例,当运行第二个实例时,实际上是激活第一个实例,将其带到最顶层。
原型:
代码语言:javascript复制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。
注解:
一旦不再需要,注意必须用CloseHandle函数将互斥体句柄关闭。从属于它的所有句柄都被关闭后,就会删除对象。
进程中止前,一定要释放互斥体(ReleaseMutex(HANDLE)),如不慎 未采取这个措施,就会将这个互斥体标记为废弃,并自动释放所有权。共享这个互斥体的其他 应用程序也许仍然能够用它,但会接收到一个废弃状态信息,指出上一个所有进程未能正常关闭。
代码:
代码语言:javascript复制 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
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/153180.html原文链接:https://javaforall.cn