zoukankan      html  css  js  c++  java
  • 关于SendMessage和PostMessage的理解的例子

    对于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,那么可能得到的是延迟一段时候后的图。

  • 相关阅读:
    响应式开发: 宽高等比例缩放
    node服务成长之路
    node压力测试
    前端开发工具
    sequelize问题集锦
    webpack引入handlebars报错'You must pass a string or Handlebars AST to Handlebars.compile'
    夏夜无题
    jmeter在windows环境下系统参数设置
    服务端性能优化指南
    修车备忘
  • 原文地址:https://www.cnblogs.com/songr/p/5118979.html
Copyright © 2011-2022 走看看