为什么
HANDLE mutexHandle = INVALID_HANDLE_VALUE;
WaitForSingleObject(mutexHandle, INFINITE);
阻止?它不会返回错误消息。检查INVALID_HANDLE
的句柄对于互斥锁来说是愚蠢的,因为我需要一个互斥锁来访问互斥锁句柄...
顺便说一句:如果句柄已关闭,它会以WAIT_FAILED
返回。
答案 0 :(得分:18)
来自http://blogs.msdn.com/oldnewthing/archive/2004/03/02/82639.aspx:
第四,你必须特别注意
INVALID_HANDLE_VALUE
值:巧合的是,值INVALID_HANDLE_VALUE
恰好在数值上等于GetCurrentProcess()
返回的伪句柄。许多内核函数都接受伪句柄,所以如果你搞砸了并且意外地在失败的WaitForSingleObject
句柄上调用INVALID_HANDLE_VALUE
,你实际上最终会等待自己的进程。当然,这种等待永远不会完成,因为当一个过程退出时会发出信号,所以你最终等着自己。