UpdateData在线程中出错的解决办法
最近在写一个监视程序,需要定时查看共享内存中的各个值。于是在MFC中,首先开了一个线程,用的是boost的timer,每隔1秒读取共享内存中的值,另外一个线程通过调用UpdateData(FALSE)将值显示在界面上。但是在我调试的时候发现,UpdateData一直报错。
最后查了下,还是线程的问题,在线程中,不能直接用UpdateData来更新数值。解决的办法,应该自己定义一个消息,将UpdateData(FALSE)替换为SendMessage(WM_UPDATEDATA, FALSE)就可以了。具体的做法如下:
首先,定义消息和回调函数
加入函数映射
- #define WM_UPDATEDATA WM_USER + 1
- LRESULT OnUpdateData(WPARAM wParam, LPARAM lParam);
- ON_MESSAGE(WM_UPDATEDATA, OnUpdateData)
最后,实现回调函数
- LRESULT CXXXDlg::OnUpdateData(WPARAM wParam, LPARAM lParam)
- {
- UpdateData(wParam);
- return 0;
- }