[Win32]用Mutex控制程序的運行實例數目
在很多情況下,我們需要控制當前程序只能在本機上存在一個運行實例;如果程序已存在運行實例,則在啟動程序的時候,提示用戶程序已在運行。這可以通過Windows操作系統提供的Mutex來支持,有關Mutex的詳情,可以參考操作系統相關的書籍。為用Mutex實現這種效果,我們許要了解下Win32里面的CreateMutex這個函數:
CreateMutex
The CreateMutex function creates or opens a named or unnamed mutex object.
在調用這個函數的時候,程序會以lpMutexAttributes和bInitialiOwner參數在當前的程序上下文中創建一個lpName指示的名字的Mutex,如果創建成功,程序返回新創建的mutex對象的handle,如果創建失敗,返回NULL,用戶可以調用GetLastError函數獲取錯誤代碼。如果lpName指示的這個mutex對象已經存在(程序已經存在運行實例),則函數返回已經存在的該mutex對象的句柄,調用GetLastError會得到ERROR_ALREADY_EXISTS的錯誤。HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL bInitialOwner,
LPCTSTR lpName
);
那么我們程序要做的就是創建這個mutex對象,檢測錯誤代碼,若是ERROR_ALREADY_EXISTS,則表明程序已經運行。
這是代碼:
CreateMutex(NULL,TRUE,"TestMutex");
DWORD lastError=GetLastError();
if(ERROR_ALREADY_EXISTS==lastError)
![]()
{
MessageBox(NULL,"An instance of thie program already exists!","Information",MB_OK);
return 1;
}