HANDLE hMutex;BOOL CCommCenterApp::InitInstance()
{
   hMutex = CreateMutex(NULL, FALSE, "F25D2D81-9FA5-11d4-BE4D"); 
   if (hMutex == NULL)
   {
 AfxMessageBox("初始化对象失败!");
 return FALSE;
   }     if (GetLastError() == ERROR_ALREADY_EXISTS )
   {
AfxMessageBox("通讯中心程序已经运行!");
return FALSE;
   }
}int CCommCenterApp::ExitInstance() 
{
  if (hMutex)
  {
CloseHandle(hMutex);
hMutex = NULL;
  }
}结果是这样的:
我第一次运行应用程序,正常
然后正常关闭应用程序
再次运行提示应用程序提示已经运行
然后再次运行应用程序提示已经运行
只到第三次运行才能正常运行,不知道为什么,各位帮我看看啦

解决方案 »

  1.   

    试验没有问题,你直接运行 Debug 或 Release 目录下编译好的程序看看
    不要在 IDE中 F5运行
      

  2.   

    我运行的debug下的exe,确实是这样
      

  3.   

    有点奇怪了,你的 HANDLE hMutex; 定义在哪里的? 我是定义到了 CCommCenter.cpp的开始处,一个全局变量。
      

  4.   

    是定义在CCommCenterApp的开始处,全局的;如果在F5调试环境下,没有一点问题
      

  5.   

    如果我每次在环境下Build 成exe一下,然后再运行也不会出现这种情况,真是奇怪,注销,重起机器都没有用
      

  6.   

    其实利用原子表和提供的函数可以防止应用程序多次运行,但应用程序被意外的当调,原子仍会驻留内存,必须注销内存,才能再次运行该应用程序,请问针对这种情况有没有好的解决方法,我想Mutex作为垮进程的是否也存在这种问题