PeekMessage和GetMessage函数的主要区别
2024-08-26 15:51:09
PeekMessage和GetMessage函数的主要区别有:
1. GetMessage的主要功能是从消息队列中“取出”消息,消息被取出以后,就从消息队列中将其删除;而PeekMessage的主要功能是“窥视”消息,如果有消息,就返回true,否则返回false。也可以使用PeekMessage从消息队列中取出消息,这要用到它的一个参数(UINT wRemoveMsg),如果设置为PM_REMOVE,消息则被取出并从消息队列中删除;如果设置为PM_NOREMOVE,消息就不会从消息队列中取出。
2. 如果GetMessage从消息队列中取不到消息,则线程就会被操作系统挂起,等到OS重新调度该线程时,两者的性质不同:使用GetMessage线程仍会被挂起,使用PeekMessage线程会得到CPU的控制权,运行一段时间。
3. GetMessage每次都会等待消息,直到取到消息才返回;而PeekMessage只是查询消息队列,没有消息就立即返回,从返回值判断是否取到了消息。
我们也可以说,PeekMessage是一个具有线程异步行为的函数,不管消息队列中是否有消息,函数都会立即返回。而GetMessage则是一个具有线程同步行为的函数,如果消息队列中没有消息的话,函数就会一直等待,直到消息队列中至少有一条消息时才返回。
如果消息队列中没有消息,PeekMessage总是能返回,这就相当于在执行一个循环,如果消息队列一直为空, 它就进入了一个死循环。GetMessage则不可能因为消息队列为空而进入死循环。
在Windows的内部,两个函数执行着相同的代码。
具体情况具体分析,无法说明到底哪一个更好一些,这要根据实际的应用情况而定。
最新文章
- Java打jar包详细教学
- Github 扩展推荐
- 在Linux下安装和使用MySQL
- Oracle Database Links解析
- iOS 检测有没有安装其它应用 和ios9下要注意的地方
- OSG中的示例程序简介(转)
- 关于C#的那点事........
- shell跑一个PHP脚本的简单命令
- Altium Designer 从导入DXF文件,并转换成板框
- DBA优化SQL采用的WITH AS 用法简介
- C语言盲点笔记1
- ElasticSearch(7)-排序
- [ExtJS5学习笔记]第三十五节 sencha extjs 5 组件查询方法总结
- Bugku-CTF之Trim的日记本(不要一次就放弃)
- vue 构建项目vue-cli
- Java 的Event机制浅析
- 【转载】COM 组件设计与应用(十)——IDispatch 接口 for VC.NET
- poj 1879 Truck History
- 关于SQL语句的一些注意事项
- python--list和tuple类型--2
热门文章
- 阿里云OSS 中文名称地址不对
- CodeForces Contest #1114: Round #538 (Div. 2)
- PWN入门
- C++ 螺旋矩阵算法
- [原创]Sql2008 使用TVP批量插入数据
- python3 之__str__
- [USACO17FEB]Why Did the Cow Cross the Road I G
- 使用VSCode创建.NET Core 项目,添加类库间引用
- Intellij Idea 使用时总是打开上次的项目
- json多态序列化