windows消息之PostMessage和SendMessage的内部实现

PostMessage和SendMessage是Windows消息处理的关键函数。PostMessage异步发送,不等待消息处理;SendMessage同步发送,等待消息处理完成。PostMessage向自身和非自身线程窗口发送消息方式相同;SendMessage则不同。SendMessage向非自身线程窗口不需要额外操作,通过KeWaitForSingleObject实现同步。
摘要由CSDN通过智能技术生成

PostMessage和SendMessage是常用的发送消息函数。那两者有什么区别呢?

大家都知道PostMessage是向一个窗口Post一个消息,并且不再关注该消息是否被处理。

SendMessage是向窗口发送完消息后,会一直等着该窗口把消息处理完成。

那下面的问题你能回答么

1. PostMessage向自身线程窗口发消息与向非自身线程窗口发消息实现方法一样么?

2. SendMessage向自身线程窗口发消息与向非自身线程窗口发消息实现方法一样么?

3. SendMessage的窗口非自身进程,需要做额外的操作么?

4. SendMessage怎么实现消息的同步?

如果你知道上面的答案,那请关闭该页面。


以下内容参考了ReactOS 0.3.14源码,并从中整理而来。


PostMessage函数大致分为以下步骤:

1.    如果Wnd为Null,则是一个当前线程消息(与窗口无关),调用UserPostThreadMessage函数处理

1.1. Copy 消息结构到内核(消息结构的Wnd成员为Null)

1.2.  把该消息结构挂接到Wnd对应的线程消息队列中的Post消息链表中

1.3.   置线程消息队列的消息事件为有信号状态,通知它有新消息来了

2.  如果Wnd为0xFFFF,则该消息是一个广播,则向该桌面所有顶层窗口发送该消息。使用UserPostMessage函数

3. Wnd不为Null

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值