天才败类 2015-07-05 13:42 采纳率: 0%
浏览 3189

C++中多线程使用临界区域进行互斥,造成死锁,百思不得其解求指点为啥会死锁

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);
}

上面的函数,在主线程和由主线程启动的多个子线程中都会被调用,单步跟踪的时候跟着跟着就死锁卡死了,百思不得其解,我有退出临界区啊,为啥还会死锁呢?
求大神解答···
PS:AddInformation(strMessage,column);是在主界面的ListControl中插入一项数据而已;

  • 写回答

3条回答

  • zhoutianju 2015-07-05 14:30
    关注

    CRITICAL_SECTION变量初始化了没

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器