技术交流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的区别相关推荐

  1. MFC工作笔记0005---::在vc++中是什么意思

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 是C++里的,是"域操作符". 比如声明了一个类A,类A里声明了一个成员函zh ...

  2. VC++中 PostMessage和SendMessage的区别

    1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数.而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息 ...

  3. WindowsAPI中PostMessage与SendMessage的区别

    1.返回值意义的区别,先看一下 MSDN 里的声明: LRESULT SendMessage(         HWND hWnd,         UINT Msg,         WPARAM ...

  4. vc中怎么使用SendMessage自定义消息函数

    vc中怎么使用SendMessage自定义消息函数: SendMessage的基本结构如下: SendMessage(     HWND hWnd,  //消息传递的目标窗口或线程的句柄.     U ...

  5. MFC工作笔记0004---MFC中afx_msg是什么,afx_msg void function()是什么意思

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 应用程序框架产生的消息映射函数 例如:afx_msg void OnBnClickedButton ...

  6. MFC工作笔记0006---#pragma warning(disable:4996)是什么意思

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 代码实现:在.H .CPP文件开头写上:#pragma warning(disable:4996) ...

  7. 架构设计工作笔记004---架构中常见的概念积累--随时更新

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 1.仓储在企业的整个供应链中起着至关重要的作用,如果不能保证正确的进货和库存控制及发货,将会导致管 ...

  8. VB.NET工作笔记007---ASP.NET中Session超时一直不起作用

    技术交流QQ群[JAVA,.NET,BigData,AI]:170933152 最后发现是这个原因,在IIS中找到应用程序池,然后右边点击,详细设置,然后找到,进程模块中的 最大工作进程数,设置为1 ...

  9. Java工作笔记-Spring boot中配置文件加密(Jasypt的使用)

    Jasypt Spring Boot提供了Spring Boot应用程序配置文件的加密.有下面3种方式在项目中集成jasypt-spring-boot: 1. 在classpath中添加jasypt- ...

最新文章

  1. centos7.x安装图形化界面
  2. 马哥linux学习笔记:openssl的使用
  3. python一些常用方法_python常用的一些技巧
  4. MySQL索引背后的数据结构及算法原理----惊叹的深入
  5. MySQL数据检索+查询+全文本搜索
  6. 代码实现tan graph model for classification_几行代码搞定ML模型,低代码机器学习Python库正式开源...
  7. 史上最详细之Centos7安装与配置Redis6
  8. GoLang的逃逸分析
  9. moead算法流程步骤_匈牙利算法原理与实现
  10. How To Deploy OpenShift Container Platform 4.8 on KVM
  11. 阿里云-设备影子概览
  12. jpa oracle 传参int类型判空_企业级Java开发之图解JPA核心构件
  13. 第十七章——配置SQLServer(4)——优化SQLServer实例的配置
  14. linux centos 安装mysql,linux/centos安装mysql
  15. 数字频率系数测试软件,简易数字频率计电路图大全 - 全文
  16. 计算机断网后显示配置0%,电脑断网后自动报警提醒怎么设置
  17. C语言中库函数qsort的使用
  18. php亲戚称谓计算源码,亲戚称呼(亲戚关系计算器在线)
  19. 咋让计算机名字改为办公用计算机,让电脑变成历史:三星DeX将三星S8变成“办公电脑”...
  20. 程序员5种编程入门方法,如何快速学会一门编程语言?

热门文章

  1. java中的保留n位小数
  2. C语言排序方法------快速排序
  3. C语言中利用联合体巧妙处理数据
  4. SpringBoot四大核心之actuator——程序监控器
  5. 余弦距离、欧氏距离和杰卡德(Jaccard)相似性度量的比较
  6. QT中QWidget、QDialog及QMainWindow的区别
  7. 《CATIA V5 从入门到精通(第二版)》——2.5 草绘可视化设置(Visualization)
  8. 年老代过大有什么影响
  9. freemaker转word xml注意事项
  10. Shell Script 学习一