PeekMessage和GetMessage函数的主要区别

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的内部,两个函数执行着相同的代码。
具体情况具体分析,无法说明到底哪一个更好一些,这要根据实际的应用情况而定。

最新文章

  1. Java打jar包详细教学
  2. Github 扩展推荐
  3. 在Linux下安装和使用MySQL
  4. Oracle Database Links解析
  5. iOS 检测有没有安装其它应用 和ios9下要注意的地方
  6. OSG中的示例程序简介(转)
  7. 关于C#的那点事........
  8. shell跑一个PHP脚本的简单命令
  9. Altium Designer 从导入DXF文件,并转换成板框
  10. DBA优化SQL采用的WITH AS 用法简介
  11. C语言盲点笔记1
  12. ElasticSearch(7)-排序
  13. [ExtJS5学习笔记]第三十五节 sencha extjs 5 组件查询方法总结
  14. Bugku-CTF之Trim的日记本(不要一次就放弃)
  15. vue 构建项目vue-cli
  16. Java 的Event机制浅析
  17. 【转载】COM 组件设计与应用(十)——IDispatch 接口 for VC.NET
  18. poj 1879 Truck History
  19. 关于SQL语句的一些注意事项
  20. python--list和tuple类型--2

热门文章

  1. 阿里云OSS 中文名称地址不对
  2. CodeForces Contest #1114: Round #538 (Div. 2)
  3. PWN入门
  4. C++ 螺旋矩阵算法
  5. [原创]Sql2008 使用TVP批量插入数据
  6. python3 之__str__
  7. [USACO17FEB]Why Did the Cow Cross the Road I G
  8. 使用VSCode创建.NET Core 项目,添加类库间引用
  9. Intellij Idea 使用时总是打开上次的项目
  10. json多态序列化