在项目开发中,为了保证系统一致性或者安全性,经常要求系统在一个时刻在同一台机器上只能运行一个实例。可以通过以下方式实现(示例代码):
      1)在InitInstance()函数中添加如下代码:
  

HANDLE m_hMutex = ::CreateMutex(NULL,TRUE,m_pszName);

if  (GetLastError() = = ERROR_ALREADY_EXISTS)

{

       AfxMessageBox(“您已经运行了本软件!谢谢使用 ”);  //已经运行了程序

       return FALSE;

}

其中:
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,

                                           // pointer to security attributes

  BOOL bInitialOwner,  // flag for initial ownership

  LPCTSTR lpName       // pointer to mutex-object name

);

LPSECURITY_ATTRIBUTES :标志函数返回值HANDLE是否可以被子进程继承,为NULL标志不能被继承;

bInitialOwner:标志互斥量的所有者,为TRUE标志调用者创建了互斥量,并且调用线程拥有该互斥量,否则调用线程不拥有该互斥量;

              Name :互斥量名称。

2)关闭互斥体

响应ExitInstance()函数,并添加如下代码:

CloseHandle(m_hMutex);



Posted on 2005-07-08 13:18  k_eckel's mindview  阅读(1836)  评论(1)    收藏  举报