问题描述
需求:客户端同时只允许有一个实例在运行!
解决方案
方案一:添加互斥量
BOOL CVeoApp::InitInstance()
{
//单例进程模式
HANDLE hMutex=::CreateMutex(NULL,TRUE,_T("AtlasSegment"));
if(hMutex!=NULL)
{
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
// 向已经启动的进程传递参数、指令
LRESULT copyDataResult; //copyDataResult has value returned by other app
CWnd *pOtherWnd = CWnd::FindWindowW(NULL, _T("Your Project Name"));
if (pOtherWnd)
{
// TODO 实例已经存在时处理逻辑
}
CloseHandle(hMutex);
return FALSE;
}
}
…… ……
}
方案二:
检测文件a存不存在:存在,退出程序;不存在创建文件-程序运行……删除文-程序退出
方案三:
检测socket端口a是否被占用;占用,退出程序;没有占用-监听socket端口a-程序运行……释放端口-程序退出
方案四:
检测注册表a位置是否写入数据b;已经写入数据b,退出程序;没有写入,在注册表a位置写入数据b-程序运行……改回原值-程序退出
转载链接:http://blog.csdn.net/chenlu5201314/article/details/47149993