我是靠谱客的博主 执着咖啡豆,最近开发中收集的这篇文章主要介绍工作线程中调用MFC资源导致死锁,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

 

工作线程:

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;
 }
 
 
死锁原因分析:
主线程结束工作线程时使用WaitForSingleObject(m_pDecodeThread-> m_hThread,INFINITE)==WAIT_OBJECT_0
进入等待状态,如果此时工作线程执行pDecoder->m_MsgWnd.SetWindowText(strTemp)更改文本框,主线程将无法响应,
工作线程卡在pDecoder->m_MsgWnd.SetWindowText(strTemp),主线程一直等待从而死锁。
结论:
工作线程中避免操作MFC中与界面相关的函数。

 

2010-10-23

最后

以上就是执着咖啡豆为你收集整理的工作线程中调用MFC资源导致死锁的全部内容,希望文章能够帮你解决工作线程中调用MFC资源导致死锁所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部