COM组件技术讲义06
更新时间:2023-06-07 10:33:01 阅读量: 实用文档 文档下载
COM组件技术讲义
COM多线程模型、DCOM
潘爱民
/compcourse
COM组件技术讲义
内容
复习:COM聚合和COM跨进程模型 COM线程模型
分布式COM(DCOM)
–DCOM基本结构
–
–
–
–对象激活连接管理并发管理DCOM安全模型
COM组件技术讲义
COM组件技术讲义
COM组件技术讲义
COM组件技术讲义
聚合模型的要点
外部对象
–创建内部对象的时候,外部对象必须把自己的
IUnknown接口指针传给内部对象
–当外部对象接到对于聚合接口的请求时,它必须调用非委托版本的IUnknown的QueryInterface函数,并把结果返回给客户
内部对象
–内部对象类厂的CreateInstance必须检查pUnkOuter 参数–嵌套聚合:传递最外层的pUnkOuter参数
–除了非委托版本的IUnknown之外,其他接口的
三个IUnknown调用必须全部委托给外部对象的
pUnkOuter
COM组件技术讲义
COM组件技术讲义
自定义列集的要点
对象必须实现IMarshal接口
代理对象也必须实现IMarshal接口,并且代理对象与进程外对象之间协作
代理对象必须负责所有接口的跨进程操作 典型用途:
–提高跨进程调用的效率,使用缓存状态等优化技术
–marshal-by-value
COM组件技术讲义
COM组件技术讲义
进程外组件注意事项
自注册方式的变化
–命令行参数/RegServer和/UnregServer
注册类厂
何时被卸载
调用CoInitialize和CoUninitialize
实现自定义接口的代理/存根组件
COM组件技术讲义
多线程特性
Win32线程和COM线程
marshaling和同步
套间线程
自由线程
进程内组件的线程模型
COM组件技术讲义
进程和线程
进程
–在Linux平台上,时间和空间概念的结合–在Windows平台上,是个空间概念
线程
–在Linux平台上,一个执行环境
–在Windows平台上,也是一个调度单元,是个时间概念
COM组件技术讲义
Win32系统线程本身只有一种,根据应用模型可分为两种
CreateThread,创建线程
UI线程(user-interface thread)
–包含消息队列,当线程首次调用Win32User或GDI函数时产生
–常常包含消息循环,组合GetMessage/TranslateMessage/DispatchMessage
辅助线程(worker thread)
–一条执行线索,没有UI,没有消息概念
COM组件技术讲义
按照COM对象的执行环境,分为套间线程和自由线程
套间线程(apartment thread)
–位于一个STA中(Single-Threaded
Apartment)
–一个套间对应一个线程
自由线程(free thread)
–位于MTA中(Multi-Threaded Apartment)–一个进程有一个MTA,它可以包含任意数量的自由线程
COM组件技术讲义
marshaling
调用者与被调用者如果位于不同的线程中,则调用过程要有两次线程切换,线程切换也需要用到marshaling机制
COM对象的线程相依性
–有的COM对象只能在一个线程中运行
–内含UI的COM对象只能在创建线程上运行 线程之间的marshaling机制与进程间的marshaling过程一致
COM组件技术讲义
同步
只能被一个线程访问的对象不需要同步–例如Windows的窗口过程
–但是对于全部变量的访问,仍需要同步保护 有可能被多个线程访问的对象需要有同步机制
–Event、Semaphore、CriticalSection、Mutex–这样的代码被称为thread-safe
COM组件技术讲义
Apartment(套间)
是一个逻辑概念,也有实体对应 是COM对象的执行环境
分为三种套间
–STA
–MTA
–COM+引入TNA(thread-neutral apartment) *
COM组件技术讲义
STA套间
每个STA套间包含一个线程
–STA套间和线程有一一对应关系
当线程被创建后,用COM库初始化就建立起一个STA套间
–CoInitialize(NULL);
–或者CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); 在线程结束之前,调用CoUninitialize结束套间 套间线程包含消息循环
COM在套间线程中创建了一个隐藏的窗口–用途:同步、分发消息
COM组件技术讲义
STA套间(续)
在STA中创建的COM对象都属于这个STA STA对象不必处理同步,因为对象的方法代码只能被这个STA套间的线程调用
但DLL程序的引出函数如DllGetClassObject和DllCanUnloadNow等仍需同步处理。 类厂是否需要线程安全,取决于类厂的策略 如何把接口指针交给调用者
–自动marshaling
–手工marshaling
COM组件技术讲义
COM组件技术讲义
STA套间传递接口指针 通过COM传递的接口指针,COM都会自动marshaling
手工marshaling
–CoMarshalInterface和CoUnmarshalInterface–CoMarshalInterThreadInterfaceInStream和CoGetInterfaceAndReleaseStream
正在阅读:
COM组件技术讲义0606-07
CCS5.1的安装与使用08-11
政治经济学 - 习题集(含答案)11-10
2017-2022年中国铁路运输设备行业深度调研与投资战略研究报告(05-24
如何提高初中生英语阅读能力(1)11-11
高中数学第二章圆锥曲线与方程2.5直线与圆锥曲线预习导航学案新人教B版选修2 - 110-10
VB试题的部分判断选择10-16
中南大学网络教育 高起专《经济数学基础》在线作业二参考答案 611-22
网络安全编程基础习题01-07
西南交大ANSYS作业 - 图文03-02
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 讲义
- 组件
- 技术
- COM
- 高中物理-电容器与电容
- 选择排序原理及Java实现
- 基本逻辑关系和常用逻辑门电路
- 业务推动的方法40页
- C1汽车驾驶证科目一考试题库
- 绝缘耐高压测试仪原理内容
- 高二上学期政治《文化生活》期中试题
- 沉毅练达_厚积薄发_青年浮躁心理思考
- 品管部岗位职责及任职要求
- 2019年新人教版部编本三年级下册语文教学工作计划及教学进度安排
- 常山县县属国有公司运营费用管理办法(3)
- Unit 6 Knowledge and Wisdom
- 日本对中国美术教育的影响
- 军事科技论文英文题名与摘要的编写
- 网络舆论与我国公共政策议程设定研究
- 分物游戏教学设计
- 诚信教育主题班会教案
- 高效液相色谱法原理与应用-
- Dkbrpy托福考试须知FAQ
- 总降变电所和主配电无功补偿电容器投入问题讨论会议纪要