CreateMutex() 、ReleaseMutex()


功能

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。

注解

一旦不再需要,注意必須用CloseHandle函數將互斥體句柄關閉。從屬於它的所有句柄都被關閉后,就會刪除對象。
進程中止前,一定要釋放互斥體(ReleaseMutex(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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM