MFC的SendMessage与PostMessage的区别

news2024/11/6 17:28:07

一、SendMessage
同步操作: SendMessage 是一个同步函数,它会将消息发送到指定的窗口,并等待该窗口的消息处理过程完成,然后返回。这意味着它会阻塞当前线程,直到消息处理完成。

直接调用: SendMessage 会将消息直接传递给目标窗口的消息处理函数,因此消息处理函数在当前线程中执行。这可以确保消息的有序处理,但也可能导致界面冻结,如果消息处理耗时较长。

用途: 通常用于在同一应用程序内的不同窗口之间传递消息,或者用于发送和接收系统消息

二、PostMessage

异步操作: PostMessage 是一个异步函数,它会将消息放入目标窗口的消息队列中,然后立即返回。它不会等待消息处理完成。

间接调用: PostMessage 不会立即调用目标窗口的消息处理函数。消息会在目标窗口的消息队列中排队,等待目标窗口的消息循环来处理。这意味着消息处理是在目标窗口的线程上执行的。

用途: 通常用于在不同线程之间传递消息,以避免界面冻结或执行长时间运行的任务。

PostMessage是非阻塞的,直接把消息放到消息队列之中,发送函数继续执行,若是发送的参数是临时变量,将会在消息处理函数产生乱码,所以才有静态,或者全局变量避免乱码


#define TTMSG_WARNLIST1 9999
BEGIN_MESSAGE_MAP(CMFCTESTDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, &CMFCTESTDlg::OnBnClickedButton1)
	ON_MESSAGE(TTMSG_WARNLIST1, &CMFCTESTDlg::OnTTwarnListMsg1)
	ON_BN_CLICKED(IDC_BUTTON2, &CMFCTESTDlg::OnBnClickedButton2)
	ON_BN_CLICKED(IDC_BUTTON3, &CMFCTESTDlg::OnBnClickedButton3)
	ON_BN_CLICKED(IDC_BUTTON4, &CMFCTESTDlg::OnBnClickedButton4)
END_MESSAGE_MAP()





void CMFCTESTDlg::OnBnClickedButton3()
{
	CString str1 = _T("123");
	CString str2 = _T("hello");

	::SendMessage(this->GetSafeHwnd(), TTMSG_WARNLIST1, (WPARAM)(LPCTSTR)str1, (LPARAM)(LPCTSTR)str2); //发送消息方式1
	int m=0;
	m++;

}


void CMFCTESTDlg::OnBnClickedButton2()
{
	CString str1 = _T("123");
	CString str2 = _T("hello");

	::PostMessage(this->GetSafeHwnd(), TTMSG_WARNLIST1, (WPARAM)(LPCTSTR)str1, (LPARAM)(LPCTSTR)str2); //发送消息方式1
	int m=0;
	m++;
	// SendMessage(TTMSG_WARNLIST1, (WPARAM)(LPCTSTR)str1, (LPARAM)(LPCTSTR)str2);     //发送消息方式2
}

LRESULT  CMFCTESTDlg::OnTTwarnListMsg1(WPARAM wParam, LPARAM lParam)
{
	int mm = wParam;
	CString cstr1 = (LPCTSTR)wParam;
	CString cstr2 = (LPCTSTR)lParam;
	m_ctrlEdit.SetWindowText(cstr1+cstr2);
	return TRUE;
}


在这里插入图片描述
以上乱码,将传递参数改成全局或者静态,确保函数推出后不会回收内存即可。
参考:https://blog.csdn.net/sinat_31608641/article/details/106684808

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2229070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

update-alternatives(选择工具)

0 Preface/foreword 1 update-alternatives介绍 1.1 选项和用法 1.2 install用法 update-alternatives --install <link> <name> <path> <priority> [--slave <link> <name> <path>] link&#xff1a;符号链接&#xff08;软链…

PostgreSQL(WINDOWS)下载、安装、简单使用

下载 PostgreSQL: Downloads PostgreSQL: Windows installers EDB: Open-Source, Enterprise Postgres Database Management 安装 注意密码要方便自己使用&#xff0c;不能忘记。 打开pgAdmin&#xff0c;输入密码 新建数据库 打开命令工具 新建表

疯狂讲义———第3章 数据类型与运算符

目录 一.注释的重要性 1.注释 2.Java语言的注释类型 3.文档注释 二.javadoc命令的用法 三.数据类型的两大类 四.8种基本类型及各自的注意点 1.整型 2.字符型 3.浮点型 4.布尔型 五.自动类型转换和强制类型转换 六.表达式类型的自动提升 七.Java提供的基本运算符 八.运算符的结…

【算法】递归系列:206.反转链表(两种递归实现)

目录 1、题目链接 2、题目介绍 3、解法 递归法&#xff08;从前往后递归&#xff09; 从后往前递归 4、代码 递归法&#xff08;从前往后递归&#xff09; 从后往前递归 1、题目链接 206.反转链表 2、题目介绍 3、解法 递归法&#xff08;从前往后递归&#xff09; 递归…

编程之路:蓝桥杯备赛指南

文章目录 一、蓝桥杯的起源与发展二、比赛的目的与意义三、比赛内容与形式四、比赛前的准备五、获奖与激励六、蓝桥杯的影响力七、蓝桥杯比赛注意事项详解使用Dev-C的注意事项 一、蓝桥杯的起源与发展 蓝桥杯全国软件和信息技术专业人才大赛&#xff0c;简称蓝桥杯&#xff0c…

uni-app 运行HarmonyOS项目

1. uni-app 运行HarmonyOS项目 文档中心 1.1. HarmonyOS端 1.1.1. 准备工作 &#xff08;1&#xff09;下载DevEco Studio开发工具。   &#xff08;2&#xff09;在 DevEco Studio 中打开任意一个项目&#xff08;也可以新建一个空项目&#xff09;。   &#xff08;3&…

camera和lidar外参标定

雷达和相机的外参标定&#xff08;外部参数标定&#xff09;指的是确定两者之间的旋转和平移关系&#xff0c;使得它们的坐标系可以对齐。 文章目录 无目标标定livox_camera_calibdirect_visual_lidar_calibration 有目标标定velo2cam_calibration 无目标标定 livox_camera_ca…

【Python3】【力扣题】405. 数字转换为十六进制数

【力扣题】题目描述&#xff1a; 题意理解&#xff1a;&#xff08;不允许使用库函数&#xff09; 数字等于0&#xff0c;则结果为0&#xff0c; 数字小于0&#xff0c;则补码运算&#xff0c;即最高位&#xff08;32位&#xff09;为1&#xff0c;其余全部取反&#xff0c;再加…

扫雷游戏(C语言详解)

扫雷游戏&#xff08;C语言详解&#xff09; 放在最前面的1、前言&#xff08;扫雷游戏的简介&#xff09;2、扫雷游戏的规则&#xff08;简易版&#xff09;3、代码实现&#xff08;3.1&#xff09;提醒一下&#xff1a;( i ) 提醒1&#xff1a;( ii ) 提醒2&#xff1a; &…

PointLIO利用unilidar复现

配置宇树激光雷达的时候出现程序报错问题 问题&#xff1a; 问题链接 原因&#xff1a;普通账户没有权限访问设备——也就是ubuntu 存在串口数据读取权限问题 ttyS0设备的用户主为root,所属的组为dialout 同时owner和group都是有相同的rw权限的&#xff0c;但others是没有任何…

Kafka 客户端工具使用分享【offsetexplorer】

前言&#xff1a; 前面我们使用 Spring Boot 继承 Kafka 完成了消息发送&#xff0c;有朋友会问 Kafka 有没有好用的客户端工具&#xff0c;RabbitMQ、RocketMQ 都有自己的管理端&#xff0c;那 Kafka 如何去查看发送出去的消息呢&#xff1f; 本篇我们就来分享一个好用的工具…

5G基础知识

那个工种&#xff1f; FDD 频分双工&#xff08;Frequency Division Duplexing&#xff09;&#xff0c;理解起来很简单&#xff0c;就是把上行和下行业务隔离在两个频段&#xff0c;互不干扰。 而 TDD 时分双工&#xff08;Time-Division Duplexing&#xff09;&#xff0c;是…

python读取视频并转换成gif图片

1. 安装三方库 moviepy 将视频转换成gif&#xff0c;需要使用 moviepy库 确保已经安装了moviepy库 pip install moviepy2. 代码实现&#xff1a; from moviepy.editor import VideoFileClipmyclip VideoFileClip("video.mp4") myclip2 myclip.subclip(0, 10).re…

Webserver(2.4)进程控制

目录 进程退出孤儿进程僵尸进程wait函数waitpid函数 进程退出 exit 刷新IO缓冲区 _exit 孤儿进程 父进程运行结束&#xff0c;但子进程还在运行&#xff0c;这样的子进程称为孤儿进程。 每当出现一个孤儿进程的时候&#xff0c;内核就把孤儿进程的父进程设置为init&#xff…

UART-通用异步收发器

1. UART的基本工作原理 UART通信主要有两个部分构成&#xff1a;发送器和接收器&#xff0c;也就是我们常见的&#xff08;RX接收&#xff0c;TX发送&#xff09;两个独立的线路来实现数据的双向传输&#xff0c;由于是异步的&#xff0c;UART并不需要时钟信号&#xff0c;而是…

linux 互斥锁

首先是概念 互斥锁是可以休眠的。 所以不能在中断中使用&#xff0c; 在中断中只能使用 自旋锁。 然后是 函数&#xff1a; 然后是 open 如果以 NONBLOCK 打开&#xff0c; 遇到 互斥锁怎么办&#xff1f; 总结一下&#xff1a; 1 open() 函数的 阻塞与不阻塞的标志&#…

第72期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

[ 应急响应靶场实战 ] VMware 搭建win server 2012应急响应靶机 攻击者获取服务器权限上传恶意病毒 防守方人员应急响应并溯源

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

Linux运维高手工具全集及功能分类:20+必备神器

文章目录 Linux运维高手工具全集及功能分类&#xff1a;20必备神器一、系统管理与配置1.1 Shell1.2 Ansible1.3 Puppet1.4 Chef 二、监控与告警2.1 Prometheus2.2 Grafana2.3 Zabbix2.4 Nagios2.5 ELK Stack&#xff08;Elasticsearch, Logstash, Kibana&#xff09; 三、容器与…

安卓APP开发中,如何使用加密芯片?

加密芯片是一种专门设计用于保护信息安全的硬件设备&#xff0c;它通过内置的加密算法对数据进行加密和解密&#xff0c;以防止敏感数据被窃取或篡改。如下图HD-RK3568-IOT工控板&#xff0c;搭载ATSHA204A加密芯片&#xff0c;常用于有安全防护要求的工商业场景&#xff0c;下…