有的程序需要單實例。
除了互斥之外,其實還要關(guān)注兩個問題(這個是本文特有的,是實實在在工作中遇到的):
- 程序被殺、崩潰之后,再次啟動是否正確。
- 多用戶時,是否也是一個實例?如果一個用戶一個實例,那么關(guān)鍵值就要加上用戶名。
#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) ? ? { // 已經(jīng)有實例了,退出。 ? ? ? ? return; ? ? } //運行實例,做事。 //退出時的操作。實際測試中發(fā)現(xiàn),進程殺死,再次啟動是正確的。所以應(yīng)該是進程退出后自動刪除。 ? ? CloseHandle(hMutex); ? ? return 0; }
?
本文摘自 :https://blog.51cto.com/u