MFC工作笔记0009---VC++中 PostMessage和SendMessage的区别
技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152
最近利用vc编写UDP通讯程序,对其中的消息机制进行了整理。vc中的消息处理与.net中不同。Net中都给我们封装好了,采用代理的方式可以进行操作。而在vc中,要自己写消息响应函数。
1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。而且,PostMessage的返回值表示PostMessage函数执行是否正确;而SendMessage的返回值表示其他程序处理消息后的返回值。这点大家应该都明白。
2, 如果在同一个线程内,PostMessage发送消息时,消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口。SendMessage发送消息时,系统直接调用目标窗口的消息处理程序,并将结果返回。SendMessage在同一线程中发送消息并不入线程消息队列。 如果在不同线程内。最好用PostThreadMessage代替PostMessage,他工作的很好。SendMessage发送消息到目标窗口所属的线程的消息队列,然后发送消息的线程等待(事实上,他应该还在做一些监测工作,比如监视QS_SENDMESSAGE标志),直到目标窗口处理完并且结果返回,发送消息的线程才继续运行。这是SendMessage的一般情况,事实上,处理过程要复杂的多。比如,当发送消息的线程监测到有别的窗口SendMessage一个消息到来时,他直接调用窗口处理过程(重入),并将处理结果返回(这个过程不需要消息循环中GetMessage等的支持)。
3, msdn: If you send a message in the range below WM_USER to the asynchronous message functions (PostMessage, SendNotifyMessage, and SendMessageCallback), its message parameters can not include pointers. Otherwise, the operation will fail.
如果发送的消息码在WM_USER之下(非自定义消息)且消息参数中带有指针,那么PostMessage,SendNotifyMessage,SendMessageCallback这些异步消息发送函数将会调用失败。 最好不要用PostMessage发送带有指针参数的消息。
MFC工作笔记0009---VC++中 PostMessage和SendMessage的区别相关推荐
- MFC工作笔记0005---::在vc++中是什么意思
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 是C++里的,是"域操作符". 比如声明了一个类A,类A里声明了一个成员函zh ...
- VC++中 PostMessage和SendMessage的区别
1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数.而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息 ...
- WindowsAPI中PostMessage与SendMessage的区别
1.返回值意义的区别,先看一下 MSDN 里的声明: LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM ...
- vc中怎么使用SendMessage自定义消息函数
vc中怎么使用SendMessage自定义消息函数: SendMessage的基本结构如下: SendMessage( HWND hWnd, //消息传递的目标窗口或线程的句柄. U ...
- MFC工作笔记0004---MFC中afx_msg是什么,afx_msg void function()是什么意思
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 应用程序框架产生的消息映射函数 例如:afx_msg void OnBnClickedButton ...
- MFC工作笔记0006---#pragma warning(disable:4996)是什么意思
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 代码实现:在.H .CPP文件开头写上:#pragma warning(disable:4996) ...
- 架构设计工作笔记004---架构中常见的概念积累--随时更新
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 1.仓储在企业的整个供应链中起着至关重要的作用,如果不能保证正确的进货和库存控制及发货,将会导致管 ...
- VB.NET工作笔记007---ASP.NET中Session超时一直不起作用
技术交流QQ群[JAVA,.NET,BigData,AI]:170933152 最后发现是这个原因,在IIS中找到应用程序池,然后右边点击,详细设置,然后找到,进程模块中的 最大工作进程数,设置为1 ...
- Java工作笔记-Spring boot中配置文件加密(Jasypt的使用)
Jasypt Spring Boot提供了Spring Boot应用程序配置文件的加密.有下面3种方式在项目中集成jasypt-spring-boot: 1. 在classpath中添加jasypt- ...
最新文章
- centos7.x安装图形化界面
- 马哥linux学习笔记:openssl的使用
- python一些常用方法_python常用的一些技巧
- MySQL索引背后的数据结构及算法原理----惊叹的深入
- MySQL数据检索+查询+全文本搜索
- 代码实现tan graph model for classification_几行代码搞定ML模型,低代码机器学习Python库正式开源...
- 史上最详细之Centos7安装与配置Redis6
- GoLang的逃逸分析
- moead算法流程步骤_匈牙利算法原理与实现
- How To Deploy OpenShift Container Platform 4.8 on KVM
- 阿里云-设备影子概览
- jpa oracle 传参int类型判空_企业级Java开发之图解JPA核心构件
- 第十七章——配置SQLServer(4)——优化SQLServer实例的配置
- linux centos 安装mysql,linux/centos安装mysql
- 数字频率系数测试软件,简易数字频率计电路图大全 - 全文
- 计算机断网后显示配置0%,电脑断网后自动报警提醒怎么设置
- C语言中库函数qsort的使用
- php亲戚称谓计算源码,亲戚称呼(亲戚关系计算器在线)
- 咋让计算机名字改为办公用计算机,让电脑变成历史:三星DeX将三星S8变成“办公电脑”...
- 程序员5种编程入门方法,如何快速学会一门编程语言?