1. 程式人生 > >程序若執行,則無法第二次執行。

程序若執行,則無法第二次執行。

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語句程式跳出