MFC最好不要在子线程中操控界面上的控件

今天遇到一个bug,烦了我大半天。最后在QQ群中有人给我指出来了。感觉白费了很多时间。

我在一个窗口的某条信息处理函数中new了一个进度条控件对象。然后创建一个子线程,然后在子线程中delete这个控件对象。没想到每到这个delete的地方,程序就会崩溃。

提示:Debug Assertion Failed! xxx.exe

FIle:xxx.cpp

LINE:1019

 

For information on how your program can cause an assertion failure,see the Visual ...

 

我开始以为是内存越界或多次释放问题。断点跟踪的情况却说明指针和指针指向的值都是对的。为什么就不能delete呢?

现在才知道是不能在子线程中操控控件。正确的做法应该是在子线程中发送消息给窗口。让界面线程自己管理界面。

 

粘贴一下在网上搜的的解释:(还是不懂额,谁能解释一下)

不要在线程函数体内操作MFC控件,因为每个线程都有自己的线程模块状态映射表,在一个线程中操作另一个线程中创建的MFC对象,会带来意想不到的问题。更不要在线程函数里,直接调用UpdataData()函数更新用户界面,这会导致程序直接crash。而应该通过发送消息给主线程的方式,在主线程的消息响应函数里操作控件。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值