m_hMutex=CreateMutex(NULL,TRUE, "m_appname");
我用上面的函数创建.但是用ReleaseMutex(m_hMutex);释放不了.是怎么回事呢?谢谢.

解决方案 »

  1.   

    ReleaseMutex 不是用来删除互斥的. CloseHandle 可以删除. 当你用WaitForSingleObject 等待一个互斥对象, 并成功返回后, 线程将拥有这个互斥对象, 这时调用 ReleaseMutex 将使线程不再拥有互斥对象. ......msdn.
      

  2.   

    呵呵,学到了。thanks a lot
      

  3.   

    对不起, 看错了!如果你那样调用CreateMutex 而又没有返回NULL,并且 ReleaseMutex 调用未成功,  很有可能是另一进程中的线程占有了这个名为 "m_appname" 的互斥对象! 
      

  4.   

    to:realdreamer(楼主英明,贫僧久仰大名,特来拜见)
    那应该怎么样才能Close那个互斥对象呢?
      

  5.   

    我知道了。:)请各位看看下面。原因就出在这里。大家分享。
    因为:进程用一个句柄表来保存每个打开的句柄,每一个句柄值都是句柄表中的一个索引值。当你每一次调用CreateMutex时,打开一个mutex的句柄,设为1。当你第二调用CreateMutex时又打开了一个句柄,设为2。注意,此时m_hMutex的值已变为2,无论你调用多少CloseHandle,关闭的总是句柄2,而句柄1总是打开的。所以你再调用CreateMutex,返回的是ERROR_ALREADY_EXISTS