线程中使用UpdateData出错解决方法

liuxin-线程调用Updatedata函数出错的解决办法 l  问题描述          Tcp网络通信中,服务器端接收到来自客户端的连接请求并成功的建立连接,当收到来自客户端的数据时,对数据进行解析,并实现对应操作,有需要的话将在对话框中显示相应信息。通信过程中,在服务器端建立了三个线程完成主要工作,一个监听连接请求线程,另两个为来自两个客户端的数据接收监听。在接收数据解析时,将信息显示到编辑框时报错,(在线程中调用printfMsg()就出错,其 阅读详情


原文链接:http://www.cnblogs.com/lebronjames/archive/2011/02/16/1956029.html



最近写一个程序,需要在自己创建的工作线程中更新窗口数据。在使用UpdataData(false)来实现时,总是报错,在网上搜了一下,才知道在工作线程中不能使用UpdateData来更新主线程中的数据。界面的东西,最好就是用主线程(界面线程)去执行相应的操作。要想在子线程(工作线程)里执行界面线程的操作,最好是向主线程发送消息。因为MFC的CWnd用到了TLS,所以不是线程安全的。

解决办法:
1.定义一个消息 #define WM_UPDATE_MESSAGE (WM_USER+200)
2.定义消息映射
BEGIN_MESSAGE_MAP(CCServerDlg, CDialog)
//{{AFX_MSG_MAP(CCServerDlg)
...
ON_MESSAGE(WM_UPDATE_MESSAGE, OnUpdateMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3. 定义消息处理函数
// Generated message map functions
//{{AFX_MSG(CCServerDlg)
...
afx_msg LRESULT OnUpdateMessage(WPARAM wParam, LPARAM lParam); 

//}}AFX_MSG
DECLARE_MESSAGE_MAP()
4. 完成函数内容,只需调用UpdateData()即可
LRESULT CXXXDlg::OnUpdateMessage(WPARAM wParam, LPARAM lParam)
{
UpdateData(false);
return 0;
}
5.线程中的调用
UINT CXXXDlg::ClientThread(LPVOID lpParam)
{
CXXXDlg *pt=(CCServerDlg*)CWnd::FromHandle(((CCServerDlg*)lpParam)->m_hWnd);//get the handle to post message
pt->PostMessage(WM_UPDATE_MESSAGE,0,0);//OK - UpdateDate
//message sended to "pt"
...

}

6.程序中调用
// CWinThread* pThread;
// static UINT ClientThread(LPVOID lpParm);
void CCServerDlg::OnSStart() 
{
...
pThread=AfxBeginThread(ClientThread,this);
...
}

跨越移植陷阱:ESP-IDF下LVGL与ILI9341的组件化集成与常见避坑指南 本文详细解析了在ESP-IDF环境下将LVGL图形库与ILI9341显示屏驱动进行组件化集成的完整流程。重点介绍了移植过程中的关键配置策略、内存管理优化技巧以及常见问题解决方案,帮助开发者有效规避内存溢出、显示异常等典型陷阱,实现高效稳定的嵌入式GUI开发。 阅读详情

相关推荐

KLayout教程(二)编辑不同的形状

首先画一个基础的矩形,然后双击他可以定义他的坐标

集成光电子 1万+

在vc6线程中如何更新窗口数据

在vc6中如果在线程中用Update跟新主线程的数据,就会出错。错误如下:由于自己做的一款软件 遇到这个问题 所以在总结下 希望能为遇到同类问题的朋友,提供方便,节省时间。总结解决的方法有如下三个:一、定义自定的UpdateData消息具体如下:1、在主窗体头文件中用下列函数注册windows消息const UINT WM_UPDATEDATA = ::Regi

renshk的专栏 1160

专题一:Labview表格控件 及 应用(三)在表格中插入一行数据

专题一:Labview表格控件 及 应用(三) 在表格中插入一行数据 最近一段时间,做试验台上位机编程,老是用到表格控件,这几天抽时间专门写一个表格控件的专题。有用到的朋友可以参考一下。 今天接着讲一下,表格控件的数据插入,和相关的操作 1.表格控件的数据插入原理: 表格控件是一个 2D 字符串数组。 在表格插入一行,就是在2D数组插入一行。 行、列插入类似** 以下以成绩录入为例说明 2.1 不要表头直接插入 知识点1:创建数组:把数学,语文,英语三个数值,连成一个一位数组(数值型)。 知

Labview十年工控_702老师的博客 1万+

线程调用UpdateData()出错即解决办法

问题:在线程中使用UpdateData(FALSE)来更新窗口的内容,结果在Debug版本下面就出现了Assert报错.解决方案:UpdateData(FALSE)语句用SendMessage(WM_UPDATEDATA, FALSE)替代即可.xyz.h文件中:#define WM_UPDATEDATA WM_USER + 5 LRESULT OnUpdateData(WPARAM wParam

skyereeee的专栏 4084

ZYNQ实战:PS端驱动DMA实现高效数据流转与验证

本文详细介绍了在ZYNQ平台上通过PS端驱动DMA实现高效数据流转的实战方法。从ZYNQ的PS与PL数据交互基础出发,深入解析DMA核心价值,包括硬件平台搭建、Vivado配置、PS端软件架构设计及性能优化技巧,帮助开发者提升数据传输效率与系统性能。

weixin_29192141的博客 436

视觉Transformer实战 | Transformer详解与实现

本文系统介绍了 Transformer 架构的核心原理与实现。相比传统 RNN 和 CNN,Transformer 凭借自注意力机制有效捕捉序列中的长距离依赖关系,支持并行训练,显著提升效率。其核心创新在于通过查询、键、值向量计算注意力权重,理解单词间的语义关联。架构包含编码器-解码器结构:编码器通过多头自注意力和前馈网络提取输入特征;解码器利用掩码自注意力和交叉注意力生成输出。本文使用 PyTorch 实现了缩放点积注意力、位置编码、层归一化等关键模块,并构建了完整的 Transformer 模型。

盼小辉丶的博客 4万+

变量与对话框的交互:UpdateData(FALSE)&&UpdateDate(TRUE)

UpdateData(TRUE)和UpdateData(FALSE)的区别   当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了什么,就应该在访问变量前调用UpdateData(TRUE)。 UpdateData(

SurfingAnt的专栏 698

将Keil中的变量数组导出

首先,写好导出数据的函数。

小柚子的博客 1952

线程中使用UpdateData出错解决方法(转)

线程中使用UpdateData出错解决方法(转) http://hi.baidu.com/leonardhuang/blog/item/d5fa133f814777cc9e3d62ee.html   最近写一个程序,需要在自己创建的工作线程中更新窗口数据。在使用UpdataData(false)来实现时,总是报错,在网上搜了一下,才知道在工作线程中不能使用UpdateData来

wendeng6780的博客 865

n8n AI高效工作流自动化 部署使用教程

摘要: n8n是一款开源可视化工作流自动化工具,结合AI能力可高效解决重复性任务。文章详细介绍了从Docker部署到实战应用的完整流程:1)通过Docker Compose自托管n8n,确保数据可控;2)以AI客服日报机器人为例,演示如何串联工单系统、ChatGPT和邮件通知,实现定时自动化;3)进阶搭建交互式AI助手,利用ToolsAgent节点调用业务API;4)整合向量数据库构建RAG知识库问答。关键建议包括:拆分复杂工作流、严格管理凭据、区分开发与生产环境,并建议从高频刚性需求(如日报生成)切入,逐

专注AI大模型,软件混淆,授权 267

CTK Plugin Framework插件框架学习1--Qt编译CTK

【代码】Qt编译CTK。

贝勒里恩的博客 7434

UpdateData在子线程中出错的解决方法ZZ

在对话框类中创建的线程中,不能直接用UpdateData来更新数值。解决的办法,应该自己定义一个消息,将UpdateData(FALSE)替换为SendMessage(WM_UPDATEDATA, FALSE)就可以了。具体的做法如下:首先,定义消息和回调函数12#define WM_UPDATEDATA WM_USER + 1LRESU

Minds' Paradise / 意念之地 541

YOLOv13改进策略【Neck】| CVPR2024 LGAG:大核分组注意力门模块,3×3分组卷积与注意力协同的特征精准融合

本文记录的是利用LGAG 模块改进 YOLOv13 的颈部融合部分。(Large-kernel Grouped Attention Gate)通过3×3分组卷积与注意力机制结合,引导解码器处理特征与跳接特征的精准融合。本文利用模块,通过3×3分组卷积扩大感受野以捕捉更广泛局部空间上下文,同时结合注意力机制生成自适应注意力系数,对YOLOv13中关键目标特征赋予高激活值、抑制冗余背景特征,在特征融合阶段实现全局语义与局部细节的高效结合,减少计算成本的同时提升特征表达能力,增强模型对复杂场景下目标的检测精度与效

Limiiiing的博客 104

工作线程中使用UpdateData出错解决方法

在工作线程中不能使用UpdateData来更新主线程中的数据。界面的东西,最好就是用主线程(界面线程)去执行相应的操作。要想在子线程(工作线程)里执行界面线程的操作,最好是向主线程发送消息。因为MFC的CWnd用到了TLS,所以不是线程安全的。 解决办法: 1.定义一个消息 #define WM_UPDATE_MESSAGE (WM_USER+200) 2.定义消息映射 BEGIN_MES

ztsinghua的专栏 1105

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MFC下多线程UpdateData的使用方法

本文转载于http://blog.pfan.cn/yuqiexing/52543.html 线程中是不可以调用父窗口的UpdateData,原因如下:   当创建窗口的线程和UpdateData调用所在的线程不是同一线程的时候MFC就会出错。为MFC把部分信息储存在线程的TLS中,这些信息对于MFC的执行非常重要,因此MFC会在很多代码里面检查线程状态是否正确。当在线程中调用

倒计时 2858

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

UpdateData在线程中出错的解决办法 .

UpdateData在线程中出错的解决办法 2009年12月3日 虚幻 发表评论 阅读评论 最近在写一个监视程序,需要定时查看共享内存中的各个值。于是在MFC中,首先开了一个线程,用的是boost的timer,每隔1秒读取共享内存中的值,另外一个线程通过调用Upd

MOKA 911

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

(转)UpdateData在线程中出错的解决办法

UpdateData在线程中出错的解决办法 2009年12月3日 虚幻 发表评论 阅读评论 最近在写一个监视程序,需要定时查看共享内存中的各个值。于是在MFC中,首先开了一个线程,用的是boost的timer,每隔1秒读取共享内存中的值,另外一个线程通过调用UpdateData(FALSE)将值显示在界面上。但是在我调试的时候发现,UpdateData一直报错。 最...

dianyin8310的博客 338

工作线程中调用UI线程创建的窗口的UpdateData会导致Assert的问题及解决办法.

    最近写了个代码,在UI线程中创建了一个窗口,然后在工作线程中修改了这个窗口中的一些数据,然后想用UpdateData(FALSE)来更新窗口的内容,结果在Debug版本下面就出现了Assert报错,说出错地方是wincore.cpp的888行和889行,就是这两句  ASSERT((p = pMap->LookupPermanent(m_hWnd)) != NULL ||   (p

土星·北海若 2532

工作线程中调用UI线程创建的窗口的UpdateData会导致Assert的问题及解决办法(ZZ)

最近写了个代码,在UI线程中创建了一个窗口,然后在工作线程中修改了这个窗口中的一些数据,然后想用UpdateData(FALSE)来更新窗口的内容,结果在Debug版本下面就出现了Assert报错,说出错地方是wincore.cpp的888行和889行,就是这两句  ASSERT((p = pMap->LookupPermanent(m_hWnd)) != NULL ||   (p = p

faithmy509的专栏 2334
上一篇: 多线程学习
下一篇: 【C++专题】static_cast, dynamic_cast, const_cast探讨
任逍遥2011
博客等级 码龄16年 16粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值