sendmessage和postmessage的区别
BOOL PostMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
消息就是发到hWnd这个窗口
----------------------------------------------------------------------------------------------------------------------------------------------------
PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行。这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。
---------------------------------------------------------------------------------------------
前者需要马上返回
后者要阻塞等待
凡是由你设计而却由Windows系统调用的函数,统称callback函数。这些函数都有一定的类型,以配合Windows的调用操作
---------------------------------------------------------------------------------------------
注意在实际使用中才有可能体会异同点,
以前我写程序的时候发现post到消息队列的消息可能会丢失,
尤其你的消息特别多,例如用timer发送的时候容易出错
仅供参考!
---------------------------------------------------------------------------------------------
1 对于消息映射机制的理解。表面上看是A发消息到B,然后B收到消息执行相应的操作。实际上呢?消息映射的原理是:B预先设定,假如A执行了发某个消息的过程,那么B就做某一个操作。可以看出,实际上并没有什么“消息”在传递,消息映射的实质是A对B的一种函数调用。
2 进一步理解消息映射,A调用B的函数,那么A要不要等到B的过程执行完再继续呢?这就是消息队列机制了。PostMessage只是把调用要求放进一个等待队列里(消息队列),而SendMessage一定要等到B执行完消息映射函数才能继续,这就是两个函数的本质区别。
补充一下: 很多人会被“消息”的假象迷惑,一定要记住,其实并不存在什么消息,消息映射机制只不过是一种跨对象的函数调用,不是A“发消息”让B做什么,而是B“自己决定”在A“执行发消息函数”的时候做什么!
---------------------------------------------------------------------------------------------
PostMessage 是将消息发送到窗口的消息队列中,然后立即返回
SendMessage是将消息发送到窗口函数,在窗口函数处理完消息后才返回。
所以,PostMessage 是异步处理,而SendMessage是同步处理
CALLBACK是回掉的意思,即由应用程序定义,供系统调用的函数.
就实质而言,CALLBACK是一种调用方式,即__stdcall
而C/C++的默认调用方式是__cdecl
sendmessage和postmessage的区别的更多相关文章
- SENDMESSAGE和POSTMESSAGE
原文:http://www.cnblogs.com/wind-net/archive/2012/11/01/2750123.html SendMessage 和 PostMessage 的区别 1.首 ...
- SendMessage和PostMessage区别以及WPARAM 和 LPARAM区别
WPARAM 和 LPARAM wParam和lParam 这两个是Win16系统遗留下来的产物,在Win16API中WndProc有两个参数:一个是WORD类型的16位整型变量:另一个是LONG类型 ...
- [转] - SendMessage、PostMessage原理
SendMessage.PostMessage原理 本文讲解SendMessage.PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级.中级.高级程序员进行理解,三个步骤分别 ...
- SendMessage、PostMessage原理
SendMessage.PostMessage原理 本文讲解SendMessage.PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级.中级.高级程序员进行理解,三个步骤分别 ...
- 迥异和诡异的SendMessage和PostMessage
1 故障现象 故障现象1:能够收到SendMessage()发出的消息,但收不到PostMessage()发出的消息. 故障现象2:能够收到PostMessage()发出的消息,但收不到S ...
- 关于SendMessage和PostMessage的理解的例子
对于SendMessage 和 PostMessage 平时口头的解释是 SendMessage 发送消息后等待返回, PostMessage 发送消息后立即返回 . 但是这样解释还是不具体,什么叫等 ...
- Delphi 消息函数 SendMessage函数和 PostMessage的区别
SendMessage函数 将指定的消息发到窗口.它调用特定窗口的窗口处理函数,并且不会立即返回,直到窗口处理函数处理了这个消息. PostMessage函数 将一个消息放入与创建这个窗口的消息队列相 ...
- (转)深入解析SendMessage、PostMessage
转自:http://blog.csdn.net/xt_xiaotian/article/details/2778689 本文将使用C++语言,在MFC框架的配合下给出PostMessage.S ...
- SendMessage 和 PostMessage
1.首先是返回值意义的区别,我们先看一下 MSDN 里的声明: LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPar ...
随机推荐
- 关于AVD无法使用问题
因为工作需要,刚入手android,搭建开发环境挺麻烦,整个环境的搭建配置我就不说了,网上很多,这里就只说一下我遇到的一个问题. Java JDK安装完毕,环境变量配置完毕,eclipse下载好后解压 ...
- activiti自定义流程之整合(二):使用angular js整合ueditor创建表单
注:整体环境搭建:activiti自定义流程之整合(一):整体环境配置 基础环境搭建完毕,接下来就该正式着手代码编写了,在说代码之前,我觉得有必要先说明一下activit自定义流程的操作. 抛开自定义 ...
- 【Mongodb】3.0 配置身份验证db.createUser()说明
原文地址:http://bbs.51cto.com/thread-1146654-1.html 定义: 创建一个数据库新用户用db.createUser()方法,如果用户存在则返回一个用户重复错误. ...
- c++常用的一些库函数、常量和头文件
1.常用数学函数 头文件 #include <math> 或者 #include <math.h> 函数原型 功能 返回值 int abs(int x) 求整数x的绝对值 ...
- git 使用详解(8)-- tag打标签
打标签 同大多数 VCS 一样,Git 也可以对某一时间点上的版本打上标签.人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做.本节我们一起来学习如何列出所有可用的标签,如何新建标签,以 ...
- DBA_FND Load程式迁移工具介绍和应用(案例)
2014-06-10 Created By BaoXinjian
- 在ScrollView中嵌入GridView
做android程序开发的都知道,不能在一个拥有Scrollbar的组件中嵌入另一个拥有Scrollbar的组件,因为这不科学,会混淆滑动事件,导致只显示一到两行数据.那么就换一种思路,首先让子控件的 ...
- Python中if __name__ == "__main__": 的作用
在很多python脚本中在最后的部分会执行一个判断语句if __name__ == "__main__:",之后还可能会有一些执行语句.那添加这个判断的目的何在? 在python编 ...
- ruby的optparse使用小记
#自定义转换器 1 opts.accept(Hash) do |string| hash = {} string.split(',').each do |pair| key,value = pair. ...
- linux secureCRT utf-8编码显示
secureCRT 会话选项-终端-外观-字符编码: 下拉选择UTF-8 关闭当前secureCRT,另开一个新的让设置生效,显示正常.