子线程中调用UpdateData(TRUE/FALSE)出现异常解决方法
来源:互联网 发布:淘宝分店怎么开 编辑:程序博客网 时间:2024/06/05 07:36
使用子线程去调用UpdateData(TRUE/FALSE)方法更新窗体控件值时,总是会弹出“Debug Assertion Failed”异常错误;
原因是:工作线程(子线程)中不能使用UpdateData来更新主线程中的数据。界面的东西,最好就是用主线程(界面线程)去执行相应的操作。要想在子线程(工作线程)里执行界面线程的操作,最好是向主线程发送消息。因为MFC的CWnd用到了TLS,所以不是线程安全的。
解决方法:使用消息机制,PostMessage或者SendMessage方式给主线程发送消息,让主线程来实现刷新的操作。
1、定义一个消息 #define WM_UPDATE_MESSAGE (WM_USER+100)
2、定义消息映射
BEGIN_MESSAGE_MAP(CCServerDlg, CDialog)
{
{
{AFX_MSG_MAP(CCServerDlg)
...
ON_MESSAGE(WM_UPDATE_MESSAGE, &CXXXDlg::OnUpdateMessage)
}}AFX_MSG_MAP
END_MESSAGE_MAP()
END_MESSAGE_MAP()
3、在头文件中定义消息处理函数
4. 完成函数内容,只需调用UpdateData()即可
LRESULT CXXXDlg::OnUpdateMessage(WPARAM wParam, LPARAM lParam)
{
UpdateData(false);
return 0;
}
{
}
5.线程中的调用发送消息的方法
PostMessage(WM_UPDATE_MESSAGE ,NULL,NULL);
6.程序中启动线程
阅读全文
0 0
- 子线程中调用UpdateData(TRUE/FALSE)出现异常解决方法
- UpdateData(TRUE)、UpdateData(FALSE)
- UpdateData(TRUE)和UpdateData(FALSE)
- UpdateData(TRUE)和UpdateData(FALSE)
- UpdateData(TRUE)与 UpdateData(FALSE);
- updatedata(true) 与 updatedata(false)
- UpdateData(TRUE)和UpdateData(FALSE)
- MFC中updatedata(true)和updatedata(false)的用法
- MFC中UpdateData(true)和UpdateData(false)的区别
- MFC编程中UpdateData(true)和UpdateData(false)的区别
- UpdateData在子线程中出错的解决方法ZZ
- VS2005 在线程中 使用 UPDATEDATA 出现错误 解决方法
- UpdateData(TRUE)和UpdateData(FALSE)的区别
- UpdateData(TRUE)和UpdateData(FALSE)的区别
- UpdateData(FALSE)和UpdateData(TRUE)的区别
- UpdateData(TRUE)和UpdateData(FALSE)的区别
- UpdateData(TRUE)和UpdateData(FALSE)的区别
- UpdateData(TRUE)和UpdateData(FALSE)的区别
- CodeForces
- 【SpringMVC】数据类型转换以及Spring编码过滤器
- 前端学习_06.Script语法基础
- 算法进阶3-5
- 文本处理大杀器——sed
- 子线程中调用UpdateData(TRUE/FALSE)出现异常解决方法
- 浏览器工作原理(初步接触)
- 代码大全第二部分 (包含第四章)
- 欢迎使用CSDN-markdown编辑器
- printf函数的实现
- [MVVM]02-MVVMLight页面前后台消息和命令传递
- solve the version conflict of google test on ubuntu
- 893CRumor
- InnoDB的行锁