Fai*_*alM 1 c++ mfc multithreading
我有一个 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 );
}
Run Code Online (Sandbox Code Playgroud)
我从互斥体文档中了解到的是,如果一个进程退出而没有释放所获取的互斥体,则当另一个进程尝试获取它时,WaitForXXXObject() 将返回 WAIT_ABANDONED。
为了测试这一点,我运行了我的应用程序并使用任务管理器杀死了它,这样 ReleaseMutex 就不会被调用。但是当我再次运行应用程序时,InitInstance() 中的 WaitForSingleObject() 返回 WAIT_OBJECT_0。这是预期的行为吗?
当进程终止时系统自动关闭句柄。当互斥对象的最后一个句柄关闭时,该对象将被销毁。
确实,当您终止进程时,互斥体将处于废弃状态,但第二句话告诉我们,如果您终止打开它的唯一进程,互斥体将不再存在。
当您重新启动应用程序时,您会重新创建一个新的互斥锁,因为没有其他进程可以处理它。
| 归档时间: |
|
| 查看次数: |
775 次 |
| 最近记录: |