C++中多线程使用临界区域进行互斥,造成死锁,百思不得其解求指点为啥会死锁
// 在主界面中显示提示信息
void CIOCPModel::_ShowMessage(const int column,const CString szFormat,...)
{
// 根据传入的参数格式化字符串
CString strMessage;
va_list arglist;
// 处理变长参数
va_start(arglist, szFormat);
strMessage.FormatV(szFormat,arglist);
va_end(arglist);
EnterCriticalSection(&m_csTest);
// 在主界面中显示
CAA_5Axis_SingleDlg* pMain = (CAA_5Axis_SingleDlg*)m_pMain;
if( m_pMain!=NULL )
{
//pMain->ShowMsg(strMessage);
pMain->AddInformation(strMessage,column);
TRACE( strMessage+_T("\n") );
}
LeaveCriticalSection(&m_csTest);
}
上面的函数,在主线程和由主线程启动的多个子线程中都会被调用,单步跟踪的时候跟着跟着就死锁卡死了,百思不得其解,我有退出临界区啊,为啥还会死锁呢?
求大神解答···
进入临界区以后,你直接操作UI,可能AddInformation在操作界面的时候,mfc实现会有一些同步阻塞操作。这样可能会导致死锁。你应该用你更新界面没必要加锁。直接用PostMessage到主线程来更新界面。这是一个异步消息队列。这样主线程来一个个抽取消息更新界面
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。