要使應用程序只運行一個實例,一個簡單的方法是在應用程序類中使用互斥量,這可以用VC下的GUIDGEN.EXE程序產生.GUIDGEN.EXE位於VC安裝目錄CommonTools目錄下
實例
1: 新建一基於對話框的工程ex1,采用默認設置
2: 用GUIDGEN.EXE產生一個全局標志,#define one "產生的全局標志"
本例中產生的語句如下:#define one "0xbe8e2ce1, 0xdab6, 0x11d6, 0xad, 0xd0, 0x0, 0xe0, 0x4c, 0x53, 0xf6, 0xe6"
3: 在應用程序類CEx1App::InitInstance()中,用CreateMutex函數創建一個互斥量,後調用函數GetLastError()
如果結果等於ERROR_ALREADY_EXISTS說明已經有一個實例在運行了這時返回FALSE.BOOL CEx1App::InitInstance(){ handle=::CreateMutex(NULL,FALSE,one);//handle為聲明的HANDLE類型的全局變量
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
AfxMessageBox("應用程序已經在運行");
return FALSE;
}
}
4:在CEx1App::ExitInstance()中,刪除這個互斥量 int CEx1App::ExitInstance(){
CloseHandle(handle);
return CWinApp::ExitInstance();
}
本文配套源碼