工作线程中调用MFC资源导致死锁

本文介绍了在工作线程中调用MFC资源,特别是静态文本框的SetWindowText函数,导致与主线程发生死锁的情况。分析了死锁的原因,并得出结论:工作线程应避免操作与界面相关的MFC函数,以防止此类问题的发生。
摘要由CSDN通过智能技术生成

 

 

工作线程:

DWORD WINAPI CDecoder::DecodeThread(LPVOID pParam)
{
 while (ReadCouter<FileLen)
 {
  //判断标志,停止解码
  if (pDecoder->m_bDecodeExit)
  {
   File.Close();
   return 0;
  }
  
  do something
  
  //此处导致死锁
  //pDecoder->m_MsgWnd为静态文本框
  pDecoder->m_MsgWnd.SetWindowText(strTemp);

}

主线程:

开始线程:

 m_bDecodeExit=FALSE;
 m_pDecodeThread=::AfxBeginThread(
  (AFX_THREADPROC)DecodeThread,
  (LPVOID) this,
  THREAD_PRIORITY_NORMAL,
  CREATE_SUSPENDED,
  NULL
  );
 ASSERT_VALID(m_pDecodeThread);
 m_pDecodeThread-> ResumeThread();


结束线程:

 m_bDecodeExit=TRUE;
 if(WaitForSingleObject(m_pDecodeThread-> m_hThread,INFINITE)==WAIT_OBJECT_0)
 { 
  m_pDecodeThread=NULL;
 }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值