6

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

4 回答 4

7

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

于 2008-10-17T00:56:21.750 回答
4

传入一个伪造的对象可能会导致这种情况。

于 2008-10-17T00:41:33.997 回答
1

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

于 2008-10-17T00:46:24.487 回答
1

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

于 2016-12-14T20:00:19.907 回答