惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
G
Google Developers Blog
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
云风的 BLOG
云风的 BLOG
小众软件
小众软件
月光博客
月光博客
Recent Announcements
Recent Announcements
人人都是产品经理
人人都是产品经理
P
Proofpoint News Feed
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
The Cloudflare Blog
博客园_首页
美团技术团队
大猫的无限游戏
大猫的无限游戏
B
Blog
IT之家
IT之家
Jina AI
Jina AI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - ZhaoYG

大家好,本人现有信息系统项目管理师、系统分析师证书,诚寻挂靠 VB 输入超出文件尾(错误62)(转) asp.net 2.0 下集成OCX 全过程 我很欣慰,Vista下终于能用rose了 新版勘验图发布 赞! 勘验图系统(GDI+绘图) 转:在自己的工具条中使用ArcGIS Engine提供的命令和工具 Web应用程序中(VS2005+SP1)添加App_Code(转) 解决NHibernate 中与 SQL2005 关键字有冲突的问题 在C#中使用代理的方式触发事件(转) IT人士长期出差 系统分析员、系统架构师、项目经理的区别(转) 潮湿的天气,潮湿的心情 一个项目经理的个人体会 数据库视图定义及其相关操作 windows mobile实现商品销售的例子 全国计算机与软件技术资格(水平)考试的英文名称 庆祝自己通过系分考试,分发资料 Windows系列操作系统对进程间通信的支持――管道与邮路
VC++中 PostMessage和SendMessage的区别
ZhaoYG · 2007-12-06 · via 博客园 - ZhaoYG

最近利用vc编写UDP通讯程序,对其中的消息机制进行了整理。vc中的消息处理与.net中不同。Net中都给我们封装好了,采用代理的方式可以进行操作。而在vc中,要自己写消息响应函数。

1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。而且,PostMessage的返回值表示PostMessage函数执行是否正确;而SendMessage的返回值表示其他程序处理消息后的返回值。这点大家应该都明白。

2, 如果在同一个线程内,PostMessage发送消息时,消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口。SendMessage发送消息时,系统直接调用目标窗口的消息处理程序,并将结果返回。SendMessage在同一线程中发送消息并不入线程消息队列。 如果在不同线程内。最好用PostThreadMessage代替PostMessage,他工作的很好。SendMessage发送消息到目标窗口所属的线程的消息队列,然后发送消息的线程等待(事实上,他应该还在做一些监测工作,比如监视QS_SENDMESSAGE标志),直到目标窗口处理完并且结果返回,发送消息的线程才继续运行。这是SendMessage的一般情况,事实上,处理过程要复杂的多。比如,当发送消息的线程监测到有别的窗口SendMessage一个消息到来时,他直接调用窗口处理过程(重入),并将处理结果返回(这个过程不需要消息循环中GetMessage等的支持)。

3, msdn: If you send a message in the range below WM_USER to the asynchronous message functions (PostMessage, SendNotifyMessage, and SendMessageCallback), its message parameters can not include pointers. Otherwise, the operation will fail.

如果发送的消息码在WM_USER之下(非自定义消息)且消息参数中带有指针,那么PostMessage,SendNotifyMessage,SendMessageCallback这些异步消息发送函数将会调用失败。 最好不要用PostMessage发送带有指针参数的消息。