windows - 应用程序定义的消息 ID 是否应该是唯一的?
问题描述
我经常不得不在应用程序中使用基于 Windows 消息的事件模型来通知应用程序的主线程其他线程的一些结果。这种方法可以让您摆脱线程之间的阻塞。
文档说系统消息 ID 必须是唯一的。但是我没有找到应用程序消息的这种条件。同时,在 Internet 上,您经常可以找到这样一种观点,即在应用程序中,消息标识符必须是唯一的。
我认为在应用程序中保持独一无二没有任何意义。发送消息时,我们指定一个特定的窗口句柄来处理该消息。我可以在不同的窗口中使用相同的消息 ID,但决定消息接收者的是窗口句柄。它有效。
是否有任何明显的理由来跟踪应用程序中消息 ID 的唯一性?
解决方案
不要求所有消息 ID 在应用程序中都是唯一的。事实上,我们一直在使用多重分配的消息 ID:窗口类使用基于WM_USER的消息来实现特定于类的行为。最突出的示例是使用消息 ID 范围实现特定于控件的行为的通用控件。[WM_USER..WM_APP)
如果您正在打电话RegisterClassEx
,您选择使用WM_USER
-based 消息。您可以自由地重用不同窗口类使用的任何值,而不会冒冲突的风险。它是接收窗口的类和控制行为的消息 ID 的组合。
如果您没有接收器(例如,在调用 时PostThreadMessage
),您需要确保您可以唯一标识一条消息(及其有效负载)。在这种情况下,最简单的方法是使用WM_APP范围内的唯一消息 ID 。
推荐阅读
- android - 使用 Retrofit 将 JSON 对象发布到服务器
- bash - 如何解决这个模棱两可的 Azure 错误?
- c# - Mono 编译器不支持 MySQL 5.5
- c# - WPF 通知 MultiConverter 绑定集合已更改
- java - 如何使用 java 代码使用 client_credentials 获取访问令牌?
- scala - 为什么在代码中添加多行注释会使其无法编译
- c++ - 文件删除(使用取消链接)和所有磁盘空间被释放之间的延迟
- android - android - RecyclerView 项目以编程方式出现问题
- sqlbase - 一台 PC 作为 SqlBase 数据库的服务器
- amazon-web-services - AWS MobileHub - 通过 GOOGLE 和 FB 登录后获取用户个人资料详细信息