C/C++之MFC子线程调用UpdateData错误及解决方式

    最近需要使用MFC显示Kinect获取的数据。为了防止Kinect数据处理耗时太久,另外开辟了一个进程进行数据读取和处理工作。在数据处理完毕后,需要调用显示结果的函数。依照以前的做法,直接将对话框类的指针传入到子进程函数中,然后调用结果显示的函数进行显示。

    但是,运行时总是报出Assert错误,说出错地方是wincore.cpp的888行和889行错误。通过调试,发现错误指向UpdateData函数。然后通过搜索,发现原来是跨线程调用MFC窗口对象的问题。在子线程中调用界面线程的窗口对象,会产生不可预料的结果。那么,只有将结果传递给界面线程,并使用消息传递的方式来实现子线程更新界面线程的窗口对象。

    在MFC中,自定义消息及响应函数的方法为:

1. 在.h文件中自定义消息,需从WM_USER开始,如#define WM_UPDATEDATA (WM_USER+100) 

2. 在.cpp文件的MESSAGE_MAP中添加消息和响应函数的连接,如:ON_MESSAGE(WM_UPDATEDATA, &CSystemDlg::OnUpdatedata)

3. 在.h文件和.cpp文件中分别声明和定义消息响应函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值