命名内核对象可以进程之间共享句柄
通过让进程每次运行创建一个命名内核对象,判断创建是否成功
用GetLastError()获得错误代码,即可判断程序是否有实例正在运行
代码页比较简单,不做过多描述,详情参考《windows核心编程》
#include <iostream>
#include <windows.h>
int main()
{
HANDLE hMutex = CreateMutex( NULL, false, "unique");
//但是这没有达到共享,只能检测是否有实例在运行
if ( ERROR_ALREADY_EXISTS == GetLastError() )
{
std::cout << "已有一个实例在运行" << std::endl;
goto ERR;
}
std::cout << "没有实例正在运行" <<std ::endl;
ERR:getchar();
CloseHandle( hMutex );
return 0;
}