【发布时间】:2025-12-08 09:35:01
【问题描述】:
我有一个 MFC 应用程序。在 InitInstance() 中,我创建了一个命名互斥体,并通过调用 WaitForSingleObject() 立即获取它。在 ExitInstance() 中,互斥体被释放。
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 );
}
我从 Mutex 文档中了解到,如果一个进程在没有释放获取的互斥锁的情况下退出,当另一个进程尝试获取它时,WaitForXXXObject() 将返回 WAIT_ABANDONED。
为了对此进行测试,我运行了我的应用程序并使用任务管理器将其杀死,这样 ReleaseMutex 就不会被调用。但是当我再次运行应用程序时,InitInstance() 中的 WaitForSingleObject() 返回 WAIT_OBJECT_0。这是预期的行为吗?
【问题讨论】:
-
很不清楚“重新启动应用程序”与此有什么关系。当您启动调用 OpenMutex() 的 另一个 进程时,您只能获得 WAIT_ABANDONED。
-
重新启动是指应用程序再次启动。
标签: c++ multithreading mfc