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

Eri*_*fer 7 windows winapi multithreading synchronization waitforsingleobject

为什么

HANDLE mutexHandle = INVALID_HANDLE_VALUE;
WaitForSingleObject(mutexHandle, INFINITE);
Run Code Online (Sandbox Code Playgroud)

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

BTW:WAIT_FAILED如果把手关闭,它确实会返回.

Cat*_*lus 18

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

第四,你必须特别小心这个INVALID_HANDLE_VALUE值:巧合的是,这个值INVALID_HANDLE_VALUE恰好在数值上等于返回的伪句柄GetCurrentProcess().许多内核函数接受伪句柄,所以如果你陷入困境并意外地调用,例如,WaitForSingleObject在失败的INVALID_HANDLE_VALUE句柄上,你实际上最终会等待自己的进程.当然,这种等待永远不会完成,因为进程在退出时会发出信号,因此您最终会等待自己.

  • 我将`WaitForSingleObject`换行并返回`WAIT_FAILED`为`INVALID_HANDLE_VALUE`,它可能需要更少的编码. (3认同)