程序若執行,則無法第二次執行。
阿新 • • 發佈:2018-12-21
int main() { HANDLE hThread1; HANDLE hThread2; hMutex = CreateMutex(NULL, FALSE, (TEXT("tickets"))); if (hMutex) { if (GetLastError()==ERROR_ALREADY_EXISTS ) { cout << "only ont instance an run!" << endl; return 0; } } hThread1 = CreateThread(NULL, 0, fun1Proc, NULL, 0, NULL); hThread2 = CreateThread(NULL, 0, fun2Proc, NULL, 0, NULL); CloseHandle(hThread1); CloseHandle(hThread2); //WaitForSingleObject(hMutex, INFINITE); //ReleaseMutex(hMutex); ReleaseMutex(hMutex); ReleaseMutex(hMutex); Sleep(4000); return 0; }
HANDLE hMutex;
hMutex = CreateMutex(NULL,FALSE,(TEXT("tickets")));
建立了互斥物件並且起名為tickets。若程序第二次執行,名為為tickets的互斥物件,在CreateMutex函式呼叫之前,就已經存在,那麼該函式會返回已經存在的這個互斥物件的控制代碼,而這時候呼叫GetLastError函式將返回ERROR_ALREADY_EXISTS.所以進入if語句程式跳出