实现程序只允许运行一个实例的方法有利用互斥体,以及利用程序的某些属性(比如窗口类名称和窗口对象名称)等。这里贴一段利用利用互斥体(MUTEX)实现程序只允许运行一个实例的代码!
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
// 创建互斥体
HANDLE hMutex = CreateMutex(NULL, FALSE, "ONLY_ONE_PROCESS");
if (NULL == hMutex)
{
cout << "Failed to create Mutex!" << endl;
system("pause");
return -1;
}
// 当存已经运行一个实例则退出
if (hMutex && ERROR_ALREADY_EXISTS == GetLastError())
{
MessageBox(NULL, "Mutex already exists!", "Error!", MB_OK);
return -1;
}
system("pause");
ReleaseMutex(hMutex); // 释放互斥体持有权
CloseHandle(hMutex); // 关闭句柄,释放占用的资源
return 0;
}