Windows 为什么WaitForSingleObject(无效的句柄值,无限)会阻塞?

Windows 为什么WaitForSingleObject(无效的句柄值,无限)会阻塞?,windows,winapi,multithreading,synchronization,waitforsingleobject,Windows,Winapi,Multithreading,Synchronization,Waitforsingleobject,为什么 HANDLE mutexHandle = INVALID_HANDLE_VALUE; WaitForSingleObject(mutexHandle, INFINITE); 街区?它不会返回错误消息。检查句柄的无效\u句柄对于互斥体来说是愚蠢的,因为我需要一个互斥体来访问互斥体句柄 顺便说一句:如果句柄被关闭,它将返回WAIT\u FAILED。来自: 第四,您必须特别小心无效句柄\u值值:巧合的是,无效句柄\u值值恰好与GetCurrentProcess()返回的伪句柄在数字上相等。

为什么

HANDLE mutexHandle = INVALID_HANDLE_VALUE;
WaitForSingleObject(mutexHandle, INFINITE);
街区?它不会返回错误消息。检查句柄的
无效\u句柄
对于互斥体来说是愚蠢的,因为我需要一个互斥体来访问互斥体句柄

顺便说一句:如果句柄被关闭,它将返回
WAIT\u FAILED

来自:

第四,您必须特别小心
无效句柄\u值
值:巧合的是,
无效句柄\u值
值恰好与
GetCurrentProcess()返回的伪句柄在数字上相等。许多内核函数都接受伪句柄,因此,如果您搞砸了,并且意外地调用了一个失败的
无效的\u句柄\u值
句柄,比如说,
WaitForSingleObject
,那么您实际上会等待自己的进程。当然,这种等待永远不会完成,因为进程退出时会发出信号,所以您最终会等待自己


我想我现在感觉不舒服。。。所以我需要保留旧的句柄,并用一个单独的标志来表示有效性。为什么文档中没有这样说……我将包装
WaitForSingleObject
并返回
WAIT\u FAILED
,对于
INVALID\u HANDLE\u VALUE
,可能需要更少的编码。