为什么WaitForSingleObject(INVALID_HANDLE_VALUE,INFINITE)会阻塞?

时间:2009-09-24 13:28:09

标签: windows winapi multithreading synchronization waitforsingleobject

为什么

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

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

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

1 个答案:

答案 0 :(得分:18)

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

  

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