关于SendMessage和PostMessage函数消息区别

4 篇文章 0 订阅

SendMessage和PostMessage这两个函数消息的区别是:

返回值类型不同:两个函数的4个参数的意义是一样的,只有返回值类型不同(其实从数据上看他们一样是一个32位的数,只是意义不一样);

SendMessage的返回值类型是LRESULT:表示的是消息被处理后的返回值;

PostMessage的返回值类型是BOOL:表示的是消息是不是传递成功。

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

PostMessage只把消息放入窗口消息队列中,不管消息被处理后的结果就返回;

而SendMessage等待消息被处理完了之后才返回。

如果在同一个线程内,常常使用SendMessage发送消息时,速度快并能得到返回的消息处理结果。在不同线程或者进程之间,一般使用PostMessage发送消息,把消息先放入目标窗口的消息队列中,然后由目标窗口通过消息循环自行派发处理。

 

代码如下:

enum {UM_TEST = WM_USER + 222};//添加自定义消息

/*PostMessage 和 SendMessage区别*/

void CMFCjisuanDlg::OnBnClickedButton1()//SendMessage

{

    /*SendMessage(WM_CLOSE);*/

    LRESULT nRes = SendMessage(UM_TEST, 10000. - 888);

}





void CMFCjisuanDlg::OnBnClickedButton2()//PostMessage

{

    /*PostMessage(WM_CLOSE);*/

    BOOL b = PostMessage(UM_TEST, 10000. - 888);

}





void CMFCjisuanDlg::OnClose()

{

    if (AfxMessageBox(_T("确定需要退出吗?"), MB_YESNO | MB_ICONQUESTION) == IDYES)

       CDialogEx::OnClose();

}



/*自定义消息*/

afx_msg LRESULT CMFCjisuanDlg::OnUmText(WPARAM wParam, LPARAM lParam)

{

    Sleep(1000 * 2);

    return wParam + lParam;

}

具体效果如何,大家可以通过以上创建两个按钮,再创建一个UM_TEST消息函数,然后用SendMessage和PostMessage函数进行回调消息函数,再断点调试即可看到效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值