COM多线程模型与消息过滤器机制

需积分: 9 2 下载量 93 浏览量 更新于2024-08-19 收藏 374KB PPT 举报
"这篇文档主要讨论了COM(组件对象模型)中的多线程模型以及分布式COM(DCOM)的相关概念,包括DCOM的基本结构、对象激活、连接管理、并发管理和安全模型。文中还回顾了COM的聚合和跨进程模型,提到了自定义列集的过程和代理对象、组件对象的创建。此外,还特别强调了客户程序方的消息过滤器在处理组件拒绝调用时的角色。" 在COM中,多线程模型允许组件在不同的线程上下文中运行,以提高系统的并发性和响应性。COM提供了五种线程模型:Free、Apartment、Neutral、Single以及Both。Free模型的组件不绑定到任何特定的线程公寓,而Apartment模型组件则与单一线程公寓关联,确保线程安全。Neutral模型允许组件在多线程公寓中运行,但不保证线程安全。Single模型组件在进程中的唯一线程公寓中运行,Both模型则允许组件在任何类型的公寓中运行。 客户端消息过滤器是COM多线程模型中的一个重要机制,当组件拒绝客户端的调用时,COM会调用这个过滤器来决定是否重试。客户端可以通过实现并注册一个接口来提供这种过滤器,RetryRejectedCall函数则是实现的关键。如果该函数返回-1,表示客户端放弃调用;否则,它返回一个延迟时间,COM会在指定时间后再次尝试调用组件。 分布式COM(DCOM)扩展了COM的概念,使得组件可以跨网络进行交互。DCOM的基本结构包括对象激活、连接管理和并发管理。对象激活涉及到如何在远程系统上创建和访问对象,连接管理处理网络通信,而并发管理则确保多个请求在不同线程上的正确处理。 DCOM的安全模型是其核心部分之一,它确保了跨网络调用的安全性。DCOM允许设置权限和访问控制,以防止未经授权的访问和操作。自定义列集是DCOM中提高跨进程调用效率的一种方法,通过实现IMarshal接口,组件和代理对象可以定制数据传输的方式,例如使用缓存或优化技术。 代理对象和存根代码在DCOM中起到桥梁作用,它们分别位于客户端和服务器端,负责接口调用的转换和网络通信。代理对象负责在客户端创建,并实现本地调用到远程调用的转换;存根代码则在服务器端接收这些调用并将其转发给实际的组件对象。 这篇文档深入探讨了COM和DCOM的多线程模型及其相关的并发管理、安全模型和组件交互机制,对于理解COM编程和分布式系统设计具有重要意义。