/ / WaitForSingleObject () não retornando WAIT_ABANDONED - c ++, multithreading, mfc

WaitForSingleObject () não retornando WAIT_ABANDONED - c ++, multithreading, mfc

Eu tenho um aplicativo MFC. Em InitInstance () eu criei um mutex nomeado e adquiri-lo imediatamente chamando WaitForSingleObject (). No ExitInstance () o mutex é liberado.

BOOL CMyApp::InitInstance()
{
m_hMutex = CreateMutex( NULL, FALSE, "MyAppMutex" );
DWORD dwRes = WaitForSingleObject( m_hMutex, INFINITE );
switch( dwRes )
{
case WAIT_ABANDONED:
break;
case WAIT_OBJECT_0:
break;
}
}

BOOL CMyApp::ExitInstance()
{
::ReleaseMutex( m_hMutex );
::CloseHandle( m_hMutex );
}

O que eu entendo da documentação da Mutex é que, se um processo sair sem liberar o mutex adquirido, quando outro processo tentar adquiri-lo, WaitForXXXObject () retornará WAIT_ABANDONED.

Para testar isso eu corri meu aplicativo e mateiusando o gerenciador de tarefas para que o ReleaseMutex não seja chamado. Mas quando eu corri o aplicativo novamente WaitForSingleObject () em InitInstance () retorna WAIT_OBJECT_0. Esse é um comportamento esperado?

Respostas:

4 para resposta № 1

De Página do MSDN em CreateMutex :

O sistema fecha o identificador automaticamente quando o processo é finalizado. O objeto mutex é destruído quando seu último identificador for fechado.

É verdade que o mutex estará em um abandonadoQuando você terminar o processo, a segunda sentença nos diz que o mutex não existirá mais se você encerrou o único processo que o abriu.

Quando você reinicia seu aplicativo, você recria um novo mutex porque nenhum outro processo tinha controle sobre ele.