代码之家  ›  专栏  ›  技术社区  ›  EricSchaefer

为什么WaitForSingleObject(无效的句柄值,无限)块?

  •  7
  • EricSchaefer  · 技术社区  · 15 年前

    为什么

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

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

    顺便说一句:它是用 WAIT_FAILED 如果手柄关闭。

    1 回复  |  直到 15 年前
        1
  •  18
  •   Cat Plus Plus    15 年前

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

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