Message相关函数对比
2024-08-26 01:03:28
SendMessage | PostMessage | |
过程类型 | 同步过程:等待其他程序处理消息完了之后才返回,继续执行 | 异步过程:只把消息放入队列,不管其他程序是否处理都返回,然后继续执行 |
返回值 | 表示其他程序处理消息后的返回值 | 表示PostMessage函数执行是否正确 |
同一线程中时 | 系统直接调用目标窗口的消息处理程序,并将结果返回(比较主动);发送消息并不入线程消息队列 | 消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口 |
不同线程内 |
发送消息到目标窗口所属的线程的消息队列,然后发送消息的线程等待(事实上,他应该还在做一些监测工作, 比如监视QS_SENDMESSAGE标志),直到目标窗口处理完并且结果返回,发送消息的线程才继续运行(这是一般情况) |
最好用PostThreadMessage代替PostMessage |
参考链接:PostMessage(异步)和SendMessage(同步)的区别
GetMessage | PeekMessage | |
过程类型 | 同步过程:只有在消息队列中有消息时返回,队列中无消息就会一直等,直至下
一个消息出现时才返回。在等的这段时间,应用程序不能执行任何指令 |
异步过程:无论应用程序消息队列是否有消息,PeekMessage函数都立即返回,程序得以继续执行 后面的语句(无消息则执行其它指令,有消息时一般要将消息派发出去,再执行其它指令)。 |
删除消息 | 获得消息后回把消息从消息队列中删去 | 可以设置是否将消息删除 |
在Windows的内部,GetMessage和PeekMessage执行着相同的代码(查看应用程序消息队列,有消息时将队列中的消息派发出去)。而两者最大的不同之处则体现在没有任何消息返回到应用程序的情况下。在此种情况下,PeekMessage会返回一个空值到应用程序,GetMessage会在此时让应用程序休眠。
总结:
GET就是不GET到不罢休
PEEK只是看看有没有消息,有就拿,没有就走人
SEND是要一直等到对方收到了才放心
POST只是把消息放在邮筒里就不管走人了
最新文章
- Lesson 16 A polite request
- UIDynamicAnimator UIKit动力学
- Cannot fetch index base URL https://pypi.python.org/simple/
- [OpenGL ES 03]3D变换:模型,视图,投影与Viewport
- JQUERY1.9学习笔记 之层级选择器(四)
- redis采用序列化方案存对象
- 【学习】ie-css3.htc---让ie8以下支持css3
- ActiveMQ系列之三:理解和掌握JMS
- bat——批量删除文件文件夹
- Object constraint language for code generation from activity models
- Ajax取PHP JSON数据并显示
- 投入机器学习的怀抱?先学Python吧
- 七牛文件上传-python
- C语言学习记录_2019.02.09
- Linux原始套接字实现分析---转
- Redis集群入门
- vue+element-ui中的图片获取与上传
- java文件操作(普通文件以及配置文件的读写操作)
- C++ Primer笔记2_四种类型转换_异常机制
- Hibernate单向“多对一”关联
热门文章
- python分别使用多线程和多进程获取所有股票实时数据
- Linux驱动开发1——基础知识
- MySQL慢日志分析之pt-query-digest
- ASP Loading
- Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText()、CheckedState()
- debian 配置静态ip
- vue-methods方法与computed计算属性的差别
- Java 之 回调方法
- 3 Vue.js基础
- vue项目 Request Payload改成Form Data