Why would WaitForSingleObject return WAIT_FAILED

2019-02-18 15:11发布

MSDN says

If the function fails, the return value is WAIT_FAILED. To get extended error information, call GetLastError.

The code is:

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 );

But what are the reasons that could happen?

4条回答
爱情/是我丢掉的垃圾
2楼-- · 2019-02-18 15:53

Passing in a bogus object might cause that.

查看更多
成全新的幸福
3楼-- · 2019-02-18 16:00

Closing a handle while the handle is being waited on can also cause undefined behaviour.

查看更多
We Are One
4楼-- · 2019-02-18 16:01

I got WAIT_FAILED from WaitForMultipleObjects when passing in an array of thread handles as one of them was a pseudo handle. As ever the immortal Raymond Chen explained, and provided the fix: https://blogs.msdn.microsoft.com/oldnewthing/20141015-00/?p=43843

查看更多
看我几分像从前
5楼-- · 2019-02-18 16:10

If you lack the SYNCHRONIZE privilege on the object, then you cannot wait. WAIT_FAILED will be returned.

查看更多
登录 后发表回答