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