问题
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