CPlusPlus之让程序只启动一个实例

C++中让程序只启动一个实例的方法主要有以下几种:

互斥体实现方式

主要利用如下函数实现:

1
2
3
4
5
6
函数原型:
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,//必须为NULL
BOOL bInitialOwner, //表示mutex的范围是本线程还是全系统
LPCTSTR lpName //互斥量的名字
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
bool    checkMyselfExist()//如果程序已经有一个在运行,则返回true
{
HANDLE hMutex = CreateMutex(NULL, FALSE, L"DevState");
if (hMutex && (GetLastError() == ERROR_ALREADY_EXISTS))
{
CloseHandle(hMutex);
hMutex = NULL;
return true;
}
else{
return false;
}
}

int main()
{
if (checkMyselfExist()){
cout << "program has been runnin" << endl;
}
else{
cout << "start running" << endl;
}
system("pause");

return 0;
}

参考链接

  1. C++实现程序单实例运行的两种方式,by 倚剑问天.
  2. C / C++ 如何让程序只启动一个实例,by C你.