Почему WaitForSingleObject возвращает WAIT_FAILED - PullRequest
4 голосов
/ 17 октября 2008

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 ]

7 голосов
/ 17 октября 2008

Если у вас нет привилегии SYNCHRONIZE для объекта, вы не можете ждать. WAIT_FAILED будет возвращено.

4 голосов
/ 17 октября 2008

Передача поддельного объекта может привести к этому.

1 голос
/ 14 декабря 2016

Я получил WAIT_FAILED от WaitForMultipleObjects при передаче массива дескрипторов потоков, поскольку один из них был псевдо-дескриптором. Как всегда, бессмертный Рэймонд Чен объяснил и дал исправление: https://blogs.msdn.microsoft.com/oldnewthing/20141015-00/?p=43843

1 голос
/ 17 октября 2008

Закрытие дескриптора во время ожидания дескриптора также может привести к неопределенному поведению.

...