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的区别的更多相关文章

  1. SENDMESSAGE和POSTMESSAGE

    原文:http://www.cnblogs.com/wind-net/archive/2012/11/01/2750123.html SendMessage 和 PostMessage 的区别 1.首 ...

  2. SendMessage和PostMessage区别以及WPARAM 和 LPARAM区别

    WPARAM 和 LPARAM wParam和lParam 这两个是Win16系统遗留下来的产物,在Win16API中WndProc有两个参数:一个是WORD类型的16位整型变量:另一个是LONG类型 ...

  3. [转] - SendMessage、PostMessage原理

    SendMessage.PostMessage原理 本文讲解SendMessage.PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级.中级.高级程序员进行理解,三个步骤分别 ...

  4. SendMessage、PostMessage原理

    SendMessage.PostMessage原理 本文讲解SendMessage.PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级.中级.高级程序员进行理解,三个步骤分别 ...

  5. 迥异和诡异的SendMessage和PostMessage

    1       故障现象 故障现象1:能够收到SendMessage()发出的消息,但收不到PostMessage()发出的消息. 故障现象2:能够收到PostMessage()发出的消息,但收不到S ...

  6. 关于SendMessage和PostMessage的理解的例子

    对于SendMessage 和 PostMessage 平时口头的解释是 SendMessage 发送消息后等待返回, PostMessage 发送消息后立即返回 . 但是这样解释还是不具体,什么叫等 ...

  7. Delphi 消息函数 SendMessage函数和 PostMessage的区别

    SendMessage函数 将指定的消息发到窗口.它调用特定窗口的窗口处理函数,并且不会立即返回,直到窗口处理函数处理了这个消息. PostMessage函数 将一个消息放入与创建这个窗口的消息队列相 ...

  8. (转)深入解析SendMessage、PostMessage

        转自:http://blog.csdn.net/xt_xiaotian/article/details/2778689 本文将使用C++语言,在MFC框架的配合下给出PostMessage.S ...

  9. SendMessage 和 PostMessage

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

随机推荐

  1. CFLAGS,CPPFLAGS,CXXFLAGS in Makefile

    CC 与 CXX:      这是 C 与 C++ 编译器命令.默认值一般是 “gcc” 与 “g++”. CPPFLAGS will be given to the C preprocessor   ...

  2. jQuery-webcam(.NET)实现WEB摄像头监控

    jQuery-webcam是一个非常好用的摄像头监控工具,DEMO可官方下载地址http://www.xarg.org/project/jquery-webcam-plugin/ 1.下载解压后,jq ...

  3. [tty与uart]2.tty和uart的函数调用流程

    以下是在include/uapi/linux/tty.h中定义了现有的线规号,如果需要定义新的,则需要在后面添加新的 /* line disciplines */ #define N_TTY 0 #d ...

  4. C#属性访问器

    属性的访问器包含与获取或设置属性有关的可执行语句.访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含.声明采用下列形式之一:get {}set {} get 访问器get 访问器体与 ...

  5. 黄聪:如何添加360浏览器(chrome)添加JavaScript例外,禁止网站加载JS

    注意:通配符两侧的[]不能省略

  6. adb上使用cp/mv命令的替代方法(failed on '***' - Cross-device link解决方法)

    今天把玩手头的那部Android手机时碰到一个问题,即因为权限问题无法将文件复制到/system/和/data/分区中,经过一番折腾后,算是解决了,在此记录一笔.本方所涉及到的命令输入,均用斜体字表示 ...

  7. 单元测试(junit使用)

    1.测试的对象是一个类中的方法. 2.导入jar包. 3.单元测试方法时候,测试方法命名规则为 public void 方法名(){},注意:测试类不能命名为public class Test{},T ...

  8. The dependency `BaiduMapKit` is not used in any concrete target

    RubertdeMacBook-Pro:项目名 Rubert$ pod install Analyzing dependencies [!] The dependency `BaiduMapKit` ...

  9. vim 学习日志(1):剪切,复制,粘贴,删除,撤销

    一:光标命令     左h 上j 下k 右l :goto n 表示跳转到文本的第n个字符 :n 表示跳到第n行 nG n为行数,该命令立即使光标跳到指定行:n为空,光标跳到文件最后一行. Ctrl+G ...

  10. 并发工具类(三)控制并发线程数的Semaphore

    原文:http://ifeve.com/concurrency-semaphore/#more-14753 简介 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程, ...