一. 為什么要實現(xiàn)進程單例
二.實現(xiàn)進程單例的思路方法:
? ? 1.思路:
? ? ? 進程在啟動時首先檢查當前系統(tǒng)是否已經(jīng)存在有此進程的實例,如果沒有,進程將成功創(chuàng)建并設(shè)置標識實例已經(jīng)存在的標記。此后再創(chuàng)建進程時將會通過該標記而知曉其實例已經(jīng)存在,從而保證進程在系統(tǒng)中只能存在一個實例。
? ? 2.方法:
? ? ? 內(nèi)存映射文件、有名事件量、有名互斥量以及全局共享變量等多種方法來實現(xiàn)
三.具體實現(xiàn):
? ? ?互斥量:
? ? ? 使用CreateMutex() 得到一個Hanldle句柄,使用GetLastError()判斷是否為ERROR_ALREADY_EXISTS,如果是則已經(jīng)存在。
// 創(chuàng)建互斥量
HANDLE m_hMutex = CreateMutex(NULL, FALSE, "Sample07");
// 檢查錯誤代碼
if (GetLastError() == ERROR_ALREADY_EXISTS) {
// 如果已有互斥量存在則釋放句柄并復位互斥量
CloseHandle(m_hMutex);
m_hMutex = NULL;
// 程序退出
return FALSE;
}