[Win32]用Mutex控制程序的運行實例數(shù)目
在很多情況下,我們需要控制當(dāng)前程序只能在本機上存在一個運行實例;如果程序已存在運行實例,則在啟動程序的時候,提示用戶程序已在運行。這可以通過Windows操作系統(tǒng)提供的Mutex來支持,有關(guān)Mutex的詳情,可以參考操作系統(tǒng)相關(guān)的書籍。為用Mutex實現(xiàn)這種效果,我們許要了解下Win32里面的CreateMutex這個函數(shù):
CreateMutex
The CreateMutex function creates or opens a named or unnamed mutex object.
在調(diào)用這個函數(shù)的時候,程序會以lpMutexAttributes和bInitialiOwner參數(shù)在當(dāng)前的程序上下文中創(chuàng)建一個lpName指示的名字的Mutex,如果創(chuàng)建成功,程序返回新創(chuàng)建的mutex對象的handle,如果創(chuàng)建失敗,返回NULL,用戶可以調(diào)用GetLastError函數(shù)獲取錯誤代碼。如果lpName指示的這個mutex對象已經(jīng)存在(程序已經(jīng)存在運行實例),則函數(shù)返回已經(jīng)存在的該mutex對象的句柄,調(diào)用GetLastError會得到ERROR_ALREADY_EXISTS的錯誤。HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL bInitialOwner,
LPCTSTR lpName
);
那么我們程序要做的就是創(chuàng)建這個mutex對象,檢測錯誤代碼,若是ERROR_ALREADY_EXISTS,則表明程序已經(jīng)運行。
這是代碼:
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;
}





MessageBox(NULL,
}