让程序只运行一个实例
实现机制
要让程序在一台计算机上只运行一个实例, 大多数情况下且比较简单的方法是在应用程序类中使用互斥量;在程序运行前创建互斥量并检测是否成功;程序退出时再释放这个互斥量,;
代码中的EXE_LIMIT为定义的宏,用于创建互斥量,可以*定义,但为了减小重复的可能性,建议使用VC安装目录CommonTools目录下的GUIDGEN.EXE程序产生GUID
关键代码
.H文件中声明的变量或函数
//执行个数限制
#define EXE_LIMIT "C5A3A166-A11A-4cd3-87DC-900406A9AF66"
//用于限制执行个数
HANDLE m_hExe;
//执行实例
BOOL Exec();
//卸载实例
BOOL UnExec();
CPP文件中的函数实现
BOOL CMainFrame::Exec()
{
m_hExe = ::CreateMutex(NULL, FALSE, EXE_LIMIT);//g_ExeHandle为声明的HANDLE类型的全局变量
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
AfxMessageBox("程序已经在运行!");
return FALSE;
}
return TRUE;
}
BOOL CMainFrame::UnExec()
{
return CloseHandle(m_hExe);
}
运行效果
当同时运行第二个实例时,会提示,并退出,如图所示