8

为什么

HANDLE mutexHandle = INVALID_HANDLE_VALUE;
WaitForSingleObject(mutexHandle, INFINITE);

堵塞?它不会返回错误消息。检查句柄对于INVALID_HANDLE互斥锁来说是愚蠢的,因为我需要一个互斥锁来访问互斥锁句柄......

WAIT_FAILED顺便说一句:如果句柄关闭,它会返回。

4

1 回答 1

19

来自http://blogs.msdn.com/oldnewthing/archive/2004/03/02/82639.aspx

第四,您必须特别注意INVALID_HANDLE_VALUE值:巧合的是,该值INVALID_HANDLE_VALUE恰好在数值上等于GetCurrentProcess(). 许多内核函数都接受伪句柄,所以如果你搞砸了并且不小心调用WaitForSingleObject了一个失败的INVALID_HANDLE_VALUE句柄,你实际上最终会等待你自己的进程。当然,这个等待永远不会完成,因为一个进程在退出时会发出信号,所以你最终会等待自己。

于 2009-09-24T13:33:02.470 回答