• 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 问题反馈可发送邮件到stubbornhuang@qq.com

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

Win32 – SendMessage和PostMessage的区别

Windows编程 发布于2023-11-08 阅读 1,833次 0次评论 0次点赞 本文共1075个字,阅读需要3分钟。

1 SendMessage

1.1 SendMessage定义

官方文档:https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessage

函数原型

LRESULT SendMessage(
  [in] HWND   hWnd,
  [in] UINT   Msg,
  [in] WPARAM wParam,
  [in] LPARAM lParam
);

函数参数

  • hwnd:接收消息的窗口句柄
  • Msg:要发送的消息
  • wParam:附加消息
  • lParam:附加消息

返回值

返回值指定消息处理的结果

2 PostMessage

2.1 PostMessage定义

函数原型

LRESULT SendMessage(
  [in] HWND   hWnd,
  [in] UINT   Msg,
  [in] WPARAM wParam,
  [in] LPARAM lParam
);

函数参数

  • hwnd:接收消息的窗口句柄
  • Msg:要发送的消息
  • wParam:附加消息
  • lParam:附加消息

返回值

如果函数执行成功,返回非零值;如果函数执行失败,返回值为零。

3 SendMessage和PostMessage的区别

  • SendMessage发送消息是同步的,PostMessage发送消息是异步的。SendMessage需要等待消息处理完成才返回,如果所发送的消息没有处理,则发送消息的线程将一直处于阻塞状态,等待消息返回。PostMessage只是将消息放在消息队列中,不管消息是不是被处理都马上返回,这可能导致所发送的消息不会被处理。
  • 在同一个线程中,PostMessage发送消息时,消息要先放入系统消息队列中,系统会根据存放的消息,找到对应的线程(窗口、程序)的消息队列中,然后由GetMessage/PeekMessage提交给TranslateMessage,如果是键盘、鼠标消息,TranslateMessage会处理提交给DispatchMessage,如不是,则直接提交给DispatchMessage,最后DispatchMessage经USER模块协助,将消息传递给窗口处理函数;而SendMessage发送消息时,由USER模块调用目标窗口的处理函数处理消息,并将结果返回。
  • 不在同一个线程,基本都是用PostThreadMessage代替PostMessage,因为PostThreadMessage是直接指定线程ID来确定目标线程;而SendMessage发送消息到目标窗口所属的线程的消息队列中,然后发送消息的线程在UESR模块内监视和等待消息处理,直到目标窗口处理完返回。

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:Win32 – SendMessage和PostMessage的区别

原文链接:https://www.stubbornhuang.com/2882/

发布于:2023年11月08日 11:13:11

修改于:2023年11月08日 11:13:11

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
CSS - 总结ul中li元素横向排列的几种方式
CSS
下一篇
Win32 - 应用程序捕获系统强制关机、强制注销消息,WM_QUERYENDSESSION和WM_ENDSESSION
Windows编程
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号