SendMessage 和PostMessage 的区别

        有过MFC编程的小伙伴应该使用过下面两个消息映射机制接口吧,它们是:

// SendMessage的声明
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM IParam
);
​
// PostMessage的声明
LRESULT PostMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM IParam
);

上面两个函数中的个参数含义如下:

hWnd要接收消息的窗口程序的窗口句柄
Msg指定被发送的消息
wParam指定附加的消息指定消息
IParam指定附加的消息指定消息
返回值返回值指定消息处理的结果,依赖于所发送的消息

        其中的wParam和lParam两个附加参数,可以传递一些附加信息,由于它们是long型的,所以只能传递数字,如果想要传递字符串之类的则需要使用指针,也就是字符串地址,或者你也可以传递long型数值,然后在接收消息的窗口中来处理每个数值对应的处理过程。

        但是这两种消息映射是有区别的,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。PostMessage要马上返回,而SendMessage要阻塞等待。

PostMessage发送消息如图所示:

        当主线程运行到一个地方的时候,出现了一个消息传递给线程1的操作,此时PostMessage将消息传递到线程1,然后主线程继续往下执行,线程1接收到了消息就开始运行。也就是说主线程通过PostMessage发送消息后就不管线程1的生死了,我跑我的,你跑你的。

SendMessage发送消息如图所示:

        当主线程运行到一个地方的时候,出现了一个消息传递给线程1的操作,此时SendMessage将消息传递到线程1,然后主线程会被阻塞,线程1接收到了消息就开始运行,等到线程1的消息接口执行完毕返回给主线程,主线程接收到该信号再开始运行主线程接下去的程序。也就是主线程通过SendMessage发送消息后要等待线程1返回,不管多久,我都等你。

        SendMessage阻塞线程这一点一定要注意,小编在开发过程中遇到过这种情况,导致程序一直处于死循环中。找了很久才发现是线程1里面有个while死循环,导致线程1不给主线程发送返回值,所以主线程一直被阻塞~~~

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三贝勒文子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值