1、返回值意义的区别,先看一下 MSDN 里的声明:
LRESULT SendMessage(
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam
);
BOOL PostMessage(
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam
);
  其 4 个参数的意义是一样的,返回值类型不同。PostMessage的返回值(BOOL)表示PostMessage函数执行是否正确,SendMessage的返回值(LRESULT )表示其他程序处理消息后的返回值。

2、PostMessage 是异步的,SendMessage 是同步的。
  PostMessage 只把消息放入队列,不管消息是否被处理就返回,消息可能不被处理;而 SendMessage 等待消息被处理完了之后才返回,如果消息不被处理,发送消息的线程将一直被阻塞。

3、 当一个线程向该线程所建立的窗口SendMessage消息时,由 USER32.DLL 模块调用目标窗口的消息处理程序,并将结果返回,它只是调用指定窗口的消息处理过程,并不将消息入队列。当一个线程向另一个线程所建立的窗口 SendMessage时,该消息要追加到接收消息线程的发送消息队列,然后发送消息的线程进入等待状态,接收消息的线程处理完该消息后,由系统唤醒发送 消息的线程,这时发送线程继续进行。PostMessage 发送消息时,消息要先放入线程的消息队列,然后通过消息循环分派到目标窗口(DispatchMessage)。一个线程的消息队列实际上分为四种不同的 消息队列:Post消息队列、Send消息队列、输入消息队列、应答消息队列。PostMessage是将消息追加到Post消息队列,SendMessage是追加到Send消息队列,两个队列处理的优先级并不一样。

//*****

1.返回值

  其中 函数4 个参数的意义是一样的,返回值类型不同(其实从数据上看他们一样是一个 32 位的数,只是意义不一样),LRESULT 表示的是消息被处理后的返回值,BOOL 表示的是消息是不是 Post 成功。

1

2

3

4

LRESULT SendMessage (  HWND hWnd,

        UINT Msg,

        WPARAM wParam,

        LPARAM lParam );

1

2

3

4

BOOL PostMessage(  HWND hWnd,

        UINT Msg,

        WPARAM wParam,

        LPARAM lParam);

  2、PostMessage 是异步的,SendMessage 是同步的。    

     PostMessage 只把消息放到队列,不管消息是不是被处理就返回,消息可能不被处理;

SendMessage等待消息被处理完了才返回,如果消息不被处理,发送消息的线程将一直处于阻塞状态,等待消息的返回。

  

    同一个线程内:

       SendMessage 发送消息时,由USER32.DLL模块调用目标窗口的消息处理程序,并将结果返回,SendMessage 在同一个线程里面发送消息不进入线程消息队列;PostMessage 发送的消息要先放到消息队列,然后通过消息循环分派到目标窗口(DispatchMessage)。

不同线程内:

   SendMessage 发送消息到目标窗口的消息队列,然后发送消息的线程在USER32.DLL模块内监视和等待消息的处理结果,直到目标窗口的才处理返回,SendMessage在返回之前还需要做许多工作,如响应别的线程向它发送的SendMessage().PostMessge() 到别的线程的时候最好使用PostThreadMessage   代替。PostMessage()的HWND 参数可以为NULL,相当于PostThreadMessage() + GetCrrentThreadId.

   3.系统只整理和编号系统消息(0 到 WM_USER 之间的消息),发送用户消息(WM_USER 以上)到别的进程时,需要自己定义。

   用 PostMessage、SendNotifyMessage、SendMessageCallback 等异步函数发送系统消息时,参数里不可以使用指针,因为发送者并不等待消息的处理就返回,接受者还没处理指针就已经被释放了。

WindowsAPI中PostMessage与SendMessage的区别相关推荐

  1. VC++中 PostMessage和SendMessage的区别

    1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数.而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息 ...

  2. MFC工作笔记0009---VC++中 PostMessage和SendMessage的区别

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 最近利用vc编写UDP通讯程序,对其中的消息机制进行了整理.vc中的消息处理与.net中不同.Ne ...

  3. C#中PostMessage和SendMessage的参数传递实例

    用 PostMessage.SendNotifyMessage.SendMessageCallback 等异步函数发送系统消息时,参数里不可以使用指针,因为发送者并不等待消息的处理就返回,接受者还没处 ...

  4. postmessage与sendmessage的区别

    PostMessage 只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行 ; 而 SendMessage 必须等待其他程序处理消息后才返回,继续执行. PostMessage 的返回值表示 ...

  5. WindowsAPI中W和A的区别

    当使用windows api时,一般系统都会提供两个相同方法,但是结尾名字不同. 就跟LoadLibraryA和LoadLibraryW这两种方法. 类似下列 原因在于,针对于不同编码,系统提供的ap ...

  6. Android Hander post与sendMessage的区别

    Android Hander post与sendMessage的区别 post Message缓存相关 SDK 29 post 1. post方法其实与sendMassage方法一样,都会调用 sen ...

  7. python中break和continue的区别

    python中break和continue的区别 break 结束for 或者while 循环  后面还没循环到的 不再循环 continue 当满足某种条件时结束当前值的循环 后面没有循环的继续循环 ...

  8. java中separator_java - File.separator和路径中的斜杠之间的区别

    java - File.separator和路径中的斜杠之间的区别 在Java Path-String中使用/和普通的File.separator有什么区别? 与双反斜杠相比,/平台独立似乎不是原因, ...

  9. PHP中self和static的区别,php中self与static的区别

    原文链接,猛击这里. php中self与static的区别 通过一些示例,我们可以很容易看出self和static的区别.假定我们有class Car – 它有两个方法,model和getModel. ...

最新文章

  1. php浮点数计算比较及取整不准确解决方法
  2. csv文件简介(转载)
  3. 中断中是否可以使用信号量?
  4. javacore分析工具_Javacore 与 WebSphere Commerce 性能问题之争?谁才是赢家
  5. 高效的企业测试-集成测试(3/6)
  6. 服务器安装三节点RabbitMQ集群(3)
  7. Atitit 数据与模板绑定法 目录 1.1. templet - 自定义列模板 1 1.2. 方式三:直接赋值模版字符。事实上,templet 也可以直接是一段 html 内容,如: 1 1.2.
  8. Android 学习资料收集
  9. ups计算软件_一篇文章读懂UPS
  10. Pytorch实现有监督对比学习损失函数
  11. OPENCV计算机视觉图像处理频域傅里叶 DFT 变换低通滤波逆变换IDFT
  12. JavaScript的基础语句整理
  13. python表白女神
  14. table中同一列中合并相同项
  15. 通过Windows7升级正版Windows10
  16. beego使用API自动化文档生成swagger时,routers目录下无法生成commentsRouter_controllers.go文件
  17. c语言中优先级劣后级,基金优先级与劣后级的区别,看完就能明白
  18. MarkDown折叠语法
  19. 博客大巴,自动登录,并发布信息开发小计。
  20. 软件构造Lab2总结

热门文章

  1. 四数之和Python解法
  2. ppt格式刷快捷键_普通人 | 4个我在知乎上都没有见过的PPT实用技巧
  3. docker 添加端口映射_Docker快速搭建PHP开发环境详细教程
  4. Sharepoint java sdk_java – 使用JAX-WS将文件保存到Sharepoint服务器
  5. java xml签名_Java使用DSA密钥对生成XML签名的方法
  6. maven 加入第三方库_关于maven,你还要翻阅多少资料才能整理出这一份完整文档...
  7. html5新增的js api,对HTML5新增JS Api的思考
  8. edxp显示未安装_如何在 Centos 8 / RHEL 8 上安装和配置 VNC 服务器
  9. 2021年全国大学生电子设计竞赛重新启动通知及进度安排
  10. html5 绘制图形,HTML5绘制几何图形