我们现在用CMutex控制两个进程的某一种关联,因为它是操作系统级的,所以不同进程建立的同名的CMutex对象对操作系统来说只有一个,所以用它作同步。
现在的问题是:如何监视另外一个进程中同名的CMutex的释放(delete CMutex*;)?

解决方案 »

  1.   

    你用CMutex::Lock能得到同步对象的访问就说明另一个进程已经释放了
      

  2.   

    隔一段时间创建一下CMutex对象,如果创建成功,则说明另一个进程中同名的CMutex已经释放。
      

  3.   

    to laiyiling(【CSDN●】) 
    另外的进程如果不Lock,但是也没有释放,本进程还是能取到
    to hongyan80(鸿雁) 
    同名的可以创建成功,不管以前存不存在
    to vcleaner(我没当大哥很久了.......)
    我去查一下这个函数,谢谢各位
      

  4.   

    你用API,CreateMutex,成功后用GetLastError()返回ERROR_ALREADY_EXISTS,则就是另一个进程中同名的CMutex已经释放。接着释放掉。
      

  5.   

    错了,敲太急没注意汗~
    你用API,CreateMutex,成功后用GetLastError()返回ERROR_ALREADY_EXISTS,则就是另一个进程中同名的CMutex存在,没有释放。接着释放掉。
      

  6.   

    to  wangk(倒之) 
    我用的是CMutex,怎么用这种方法,谢谢清说一下
      

  7.   

    #include <afxmt.h>
    BOOL CYourApp::InitInstance()
    {
             m_pMutex = new CMutex(FALSE,m_pszAppName); if (GetLastError()==ERROR_ALREADY_EXISTS)
             {
    return FALSE;
    }
    }int CYourApp::ExitInstance() 
    {
    delete m_pMutex;
    return CWinApp::ExitInstance();
    }
      

  8.   

    HANDLE g_hMutex = NULL;
    BOOL CYourApp::InitInstance()
    {
             g_hMutex = CreateMutex(NULL, FALSE, m_pszAppName); if (hMutex == NULL) 
    {
        TRACE("CreateMutex error: %d\n", GetLastError());
        return FALSE;
    } if (GetLastError()==ERROR_ALREADY_EXISTS)
             {
    return FALSE;
    }
    }int CYourApp::ExitInstance() 
    {
    CloseHandle(g_hMutex);
    return CWinApp::ExitInstance();
    }
      

  9.   

    如何监视另外一个进程中同名的CMutex的释放
    =========
    WaitForSingleObject
      

  10.   

    直接用WaitForSingleObject来等待,同时可以设置超时等