windows有一些程序是单实例的,比如'任务管理器',‘控制面板’等,而大部分程序是多实例运行的,比如QQ,微信,各种浏览器等。在项目开发时有时要求程序单实例运行,C++的实现途径很多,这里提供信号量、互斥量、事件分别实现实现程序单例启动运行的方法。
(1)互斥量单例运行
/*
创建互斥体实现一个程序只允许允许一个实例运行
*/
#include
#include
#include
int main()
{
HANDLE hMutex = CreateMutex(NULL, FALSE, L"我是互斥体");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
printf("程序已经运行了,退出!\n");
getchar();
CloseHandle(hMutex);
return 0;
}
printf("第一次运行程序!\n");
getchar();
return 0;
}
(2)信号量
/*
利用Semaphore实现程序只允许一个进程运行
*/
#include
#include
int main()
{
HANDLE hSemaphore = CreateSemaphore(NULL, 1, 1, L"asdfg");
//根据宏ERROR_ALREADY_EXISTS进行判断是否多实例运行
if(GetLastError()&