有的程序需要單實例。
除了互斥之外,其實還要關注兩個問題(這個是本文特有的,是實實在在工作中遇到的):
- 程序被殺、崩潰之后,再次啟動是否正確。
- 多用戶時,是否也是一個實例?如果一個用戶一個實例,那么關鍵值就要加上用戶名。
#include <windows.h>
int main(int argc, char *argv[])
{
? ? HANDLE hMutex = CreateMutex(NULL, FALSE, "quantum7");
? ? DWORD dwError = GetLastError();
? ? if (ERROR_ALREADY_EXISTS == dwError || ERROR_ACCESS_DENIED == dwError)
? ? {
        // 已經有實例了,退出。
? ? ? ? return;
? ? }
    //運行實例,做事。
    //退出時的操作。實際測試中發現,進程殺死,再次啟動是正確的。所以應該是進程退出后自動刪除。
? ? CloseHandle(hMutex);
? ? return 0;
}
?
本文摘自 :https://blog.51cto.com/u

 APP
 APP 