ReleaseMutex(hMutex);必须前面有OpenMutex才可以
检查一下恰面你的程序是否有其他地方调用了CreateMutex没有释放

解决方案 »

  1.   

    我在DIALOG上放了两个BUTTON.一个create,一个releasecreate 代码:
    m_hMutex=CreateMutex( NULL,TRUE,"asfasdfsadfasdfasdf");
    if(ERROR_ALREADY_EXISTS == GetLastError ())
    AfxMessageBox("Created");
    release 代码:
             ReleaseMutex(m_hMutex);
    CloseHandle (m_hMutex);在create后我用release释放得到ERROR_ALREADY_EXISTS
      

  2.   

    create后我用release释放,当再次Create时得到ERROR_ALREADY_EXISTS
      

  3.   

    你可以把它封装成一个类来使用,
    CSingleInstance::CSingleInstance() : m_hMutex(NULL)
    {
    }//***********************************************
    CSingleInstance::~CSingleInstance()
    {
    if(m_hMutex != NULL)
    {
    ReleaseMutex(m_hMutex);
    CloseHandle(m_hMutex);
    }
    }
    bool CSingleInstance::Create(LPCTSTR szMutexName)
    {
             BOOL bSuccess;
    m_hMutex = CreateMutex(NULL, FALSE, szMutexName);
    if(m_hMutex != NULL)
    {
    if(WaitForSingleObject(m_hMutex, 0) == WAIT_OBJECT_0)
    bSuccess = true;
    }
    return bSuccess;
    }
      

  4.   

    我试了一下,如果按了"create"后再按"release"按钮,不会出现这个问题
    但是如果2次连续按下"create"按钮,则无论按下多少次"release"按钮
    都没有用的
      

  5.   

    说详细一些
    我试了一下,如果按了"create"后再按"release"按钮,此时再按"create"不会出现这个问题。
    但是如果2次连续按下"create"按钮,则无论按下多少次"release"按钮,此时再按"create"都没有用的,提示ERROR_ALREADY_EXISTS
      

  6.   

    CloseHandle (hMutex);
    后最好加句:hMutex = NULL;
      

  7.   

    我在调式时也经常碰到这种情况,原因就是hMutex没有释放掉,很可能还在某个线程当中,如果把机子重起的话就没有了。
      

  8.   

    "但是如果2次连续按下"create"按钮,则无论按下多少次"release"按钮,此时再按"create"都没有用的,提示ERROR_ALREADY_EXISTS"谁能解释一下为什么这个时候不能RELEASE呢?
      

  9.   

    因为:进程用一个句柄表来保存每个打开的句柄,每一个句柄值都是句柄表中的一个索引值。当你每一次调用CreateMutex时,打开一个mutex的句柄,设为1。当你第二调用CreateMutex时又打开了一个句柄,设为2。注意,此时m_hMutex的值已变为2,无论你调用多少CloseHandle,关闭的总是句柄2,而句柄1总是打开的。所以你再调用CreateMutex,返回的是ERROR_ALREADY_EXISTS
      

  10.   

    释放后加 handle = NULL 是个好习惯
    还有就是对每个调用的函数都进行反回直判断也很重要!
      

  11.   

    webber84(糕鱼昏)说的正确的
    所以要及时关闭hMutex