对于SendMessage 和 PostMessage 平时口头的解释是

SendMessage 发送消息后等待返回,

PostMessage 发送消息后立即返回 。

但是这样解释还是不具体,什么叫等待 什么叫立即?

下面的代码可以解释,SendMessage 必须要等到消息响应函数结束,才继续执行。

#define USER_MSG WM_USER+1

/*使用SendMessage的例子 程序执行的步骤 */
void fun()
{
// 第一步
SendMessage(hWnd,USER_MSG);
// 第三步
return; } void OnUserMesssage()
{
// 第二步
do sth;
}
/*使用PostMessage*/
#define USER_MSG WM_USER+1
void fun()
{
//第一步
PostMessage(hwnd,USER_MSG) ;
//第二步
return;
} //不知道是第几步,等待消息队列轮到USER_MSG消息被捕获。
void OnUserMsg()
{
//等待窗口的后台消息处理过程通过GetMessage 取出了消息之后,再执行。
}

那么为什么要有这样的区分?

场景1,在OnCreate 消息中,获取子窗口的位置。

因为窗体以及其子窗口在OnCreate的时候还没有创建完成,(收到了一个WM_CREATE消息)

此时,获取子窗口的的位置是不可靠的。所以,可以在OnCreate 处理函数中,

向窗口以PostMessage发送一个自定义消息,等自定义消息响应时,OnCreate已经完成了。在自定义消息中获取到子窗口的准确位置。

场景2,使用采集卡的例子中,当用户发送采集信息,主程序需要得到一个图片之后才继续执行。那么就可以用SendMessage 来通知采集卡采图。

如果用PostMessage,那么可能得到的是延迟一段时候后的图。

关于SendMessage和PostMessage的理解的例子的更多相关文章

  1. [转] - SendMessage、PostMessage原理

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

  2. SendMessage、PostMessage原理

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

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

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

  4. SENDMESSAGE和POSTMESSAGE

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

  5. 迥异和诡异的SendMessage和PostMessage

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

  6. sendmessage和postmessage的区别

    BOOL   PostMessage(          HWND   hWnd,             //   handle   of   destination   window        ...

  7. AngularJS transclude 理解及例子

    一.概念理解 transclude可以在指令中让使用者自定义模板,也就是说,指令中模板的一部分,让指令的使用者动态指定:与指定中的Scope属性值为{}时候的作用类似,scope属性让指令使用者动态制 ...

  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. Nmap工具介绍

    使用方法 实例: nmap -v scanme.nmap.org 这个选项扫描主机scanme.nmap.org中 所有的保留TCP端口.选项-v启用细节模式. nmap -sS -O scanme. ...

  2. ORACLE-JDK非收费版本下载链接

    这个链接下可以下载oracleJDK的所有版本 https://www.oracle.com/technetwork/java/javase/archive-139210.html 其中jdk192之 ...

  3. 数据库基础知识介绍(MySQL)

    一.什么是数据库 1.数据库概念:数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API接口用于创建,访问,管理,搜索和复制所保存的数据. 2.RD ...

  4. 洛谷 题解 P4158 【[SCOI2009]粉刷匠】

    状态: dp[i][j][k][0/1]: 到达第i行时, 到达第j列时, 刷到第k次时, 这一格有没有刷对 转移 换一块木板时肯定要多刷一次 dp[i][j][k][0]=max(dp[i-1][m ...

  5. Reactor系列(二)Flux Mono创建

    Flux Mono创建 视频讲解:https://www.bilibili.com/video/av78844777/ FluxMonoTestCase.java package com.exampl ...

  6. js函数(2)

    8.3函数的形参和实参 js中的函数并未指定函数形参的类型,函数调用也未对传入的实参值做任何类型的检查. 8.3.1函数的形参和实参 当调用函数时传入的实参比函数声明时指定的形参个数要少,剩下的参数都 ...

  7. textarea文本域轻松实现高度自适应

    转载:http://www.xuanfengge.com/textarea-on-how-to-achieve-a-high-degree-of-adaptive.html 今天需要些一个回复评论的页 ...

  8. windows 清理 cbs.log 文件

    请参考以下步骤 1.win+r输入 services.msc进入服务,找到并双击Windows Modules Installer点击停止, 2.然后就可以手动删除 3.按一的步骤开启TrustedI ...

  9. mysql数据库基础-2019-9-10(随堂笔记)

    mysql数据库基础 在cmd情况下启动mysql数据库:(配置path环境变量后可忽略) 运行mysql1. 进入mysql路径2. 执行:mysql -uroot -p,安装时的密码 1.数据库& ...

  10. Java虚拟机内存管理小结