用这段代码可以实现
HANDLE m_hMutex   =   CreateMutex(NULL,   TRUE,   _T("halibote"));//创建互斥变量  
if (::GetLastError()   ==   ERROR_ALREADY_EXISTS)
{
AfxMessageBox(_T("已经存在"));
return FALSE;
}
但是这段代码就不行了
CMutex MX(TRUE,_T("halibote"));
if (::GetLastError()   ==   ERROR_ALREADY_EXISTS)
{
AfxMessageBox(_T("已经存在"));
return FALSE;
}请问下大家为什么这样不行呢?

解决方案 »

  1.   

    CMutex MX(TRUE,_T("halibote")); 你这个MX在函数执行完毕后,会不会析构了啊?我是从来不用CMutex的,不知道它的析构怎么写的你想要用CMutex,就要用全局的,或者是CWinApp的成员吧,也就是生命周期要很长才行。
      

  2.   


    CMutex::~CMutex里面应该是是没有做事情的。
    在D:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc\mtex.cpp   53行
    CMutex::~CMutex()
    {
    }我在app.cpp中定义成全局的,但是好像也没有作用。
      

  3.   

    To access resources controlled by CMutex objects in this manner, first create a variable of either type CSingleLock or type CMultiLock in your resource’s access member function. Then call the lock object’s Lock member function (for example, CSingleLock::Lock). 
      

  4.   


    try{ CMutex MX(TRUE,_T("halibote"));
     
    }catch(CResourceException* pE)
    {
    //无法获取互斥体的所有权,就是说互斥体已经存在
    }