Why would WaitForSingleObject return WAIT_FAILED

放肆的年华 提交于 2019-12-19 09:21:10

问题


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?


回答1:


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




回答2:


Passing in a bogus object might cause that.




回答3:


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




回答4:


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



来源:https://stackoverflow.com/questions/210751/why-would-waitforsingleobject-return-wait-failed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!