如果函数失败,则返回值为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 );
但可能发生的原因是什么?
答案 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