为什么WaitForSingleObject会返回WAIT_FAILED

时间:2008-10-17 00:32:35

标签: windows winapi mutex

MSDN说

  

如果函数失败,则返回值为WAIT_FAILED。要获取扩展错误信息,请调用GetLastError。

代码是:

HANDLE     m_mutex_handle;    /**< m_mutex_handle. The handle to the created mutex. */
m_mutex_handle = ::CreateMutex( 0, false, NULL );
::WaitForSingleObject( m_mutex_handle, INFINITE );

但可能发生的原因是什么?

4 个答案:

答案 0 :(得分:7)

如果您缺少对象的SYNCHRONIZE权限,那么您不能等待。将返回WAIT_FAILED。

答案 1 :(得分:4)

传入虚假对象可能会导致这种情况。

答案 2 :(得分:1)

在等待句柄时关闭句柄也会导致未定义的行为。

答案 3 :(得分:1)

当传入一个线程句柄数组时,我从WaitForMultipleObjects获得了WAIT_FAILED,因为其中一个是伪句柄。正如不朽的Raymond Chen所解释的那样,并提供了修复:https://blogs.msdn.microsoft.com/oldnewthing/20141015-00/?p=43843