让程序只运行一个实例

时间:2021-11-30 04:43:38

让程序只运行一个实例

 源码

实现机制

要让程序在一台计算机上只运行一个实例, 大多数情况下且比较简单的方法是在应用程序类中使用互斥量;在程序运行前创建互斥量并检测是否成功;程序退出时再释放这个互斥量,;

代码中的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);

}

  

运行效果

当同时运行第二个实例时,会提示,并退出,如图所示

 让程序只运行一个实例