社区
C++ 语言
帖子详情
VC++ 6 开发COM组件程序,需要支持被多线程调用。
Z.&.Q
2009-03-13 02:06:25
VC++ 6 开发COM组件程序,需要支持被多线程调用。
也就是,COM组件如何支撑Multi-Instance。
有了解的高手吗?
...全文
332
7
打赏
收藏
VC++ 6 开发COM组件程序,需要支持被多线程调用。
VC++ 6 开发COM组件程序,需要支持被多线程调用。 也就是,COM组件如何支撑Multi-Instance。 有了解的高手吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
arong1234
2009-03-13
打赏
举报
回复
无论你怎么设置,跨套间(注意,不是线程,而是套间)你都需要marshal/unmarshal,我觉得楼主还是先取弄明白什么是套间以及它对访问的影响再取考虑这个问题,否则别人对你的建议可能完全不靠谱
如果你实现了多实例,那么考虑并发控制当然是你的责任而不是调用者的责任。别人怎么知道你内部会访问哪些全局数据,又怎么可能对你的内部数据进行多线程安全访问控制?!
[Quote=引用 5 楼 lucky8251 的回复:]
首先,谢谢楼上两位的回答。好像都有道理。
其实,我就是想知道,我开发的这个COM组件程序,是否需要做一些特殊的设置,好让调用我这个COM组件程序的多线程程序能够正常使用。如2楼说的设置ThreadingModel="Free",通过CoInitializeEx(0, COINIT_MULTITHREADED)初始化等等。其他的还有需要特殊处理的地方?
吗?
另外,关于3楼说的内容
-〉2. 实例应该尽量访问非全局数据,不得操空全局数据。如果一定要操空全局数据,必须使用锁进行并发控制
这个应该是调用我的COM组建的多线程程序应该考虑的巴?不是我COM组件中考虑的吧?
非常感谢 fredhong和阿荣你们能回答。
[/Quote]
大爷想要时光机
2009-03-13
打赏
举报
回复
up
Z.&.Q
2009-03-13
打赏
举报
回复
首先,谢谢楼上两位的回答。好像都有道理。
其实,我就是想知道,我开发的这个COM组件程序,是否需要做一些特殊的设置,好让调用我这个COM组件程序的多线程程序能够正常使用。如2楼说的设置ThreadingModel="Free",通过CoInitializeEx(0, COINIT_MULTITHREADED)初始化等等。其他的还有需要特殊处理的地方?
吗?
另外,关于3楼说的内容
-〉
2. 实例应该尽量访问非全局数据,不得操空全局数据。如果一定要操空全局数据,必须使用锁进行并发控制
这个应该是调用我的COM组建的多线程程序应该考虑的巴?不是我COM组件中考虑的吧?
非常感谢 fredhong和阿荣你们能回答。
猫已经找不回了
2009-03-13
打赏
举报
回复
帮up
arong1234
2009-03-13
打赏
举报
回复
1. 每次CoCreateObject创建对象时,你都返回一个新对象给它,COM对象必须不是单实例实现
2. 实例应该尽量访问非全局数据,不得操空全局数据。如果一定要操空全局数据,必须使用锁进行并发控制(后面就是多线程设计的基本功了,别人教不了,得你自己真懂才能搞好)
[Quote=引用楼主 lucky8251 的帖子:]
VC++ 6 开发COM组件程序,需要支持被多线程调用。
也就是,COM组件如何支撑Multi-Instance。
有了解的高手吗?
[/Quote]
arong1234
2009-03-13
打赏
举报
回复
你说的这个和楼主要的是两回事情,你说的是跨套间访问的问题,这基本是对COM客户端的考虑
而楼主要的是COM对象多实例之间的并发控制问题,这是服务端需要考虑的问题
[Quote=引用 1 楼 fredhong 的回复:]
COM组件要支持多线程的话,可以将COM类的ThreadingModel="Free",同时在实现类时做好并发控制,这样当使用者在多线程环境(CoInitializeEx(0, COINIT_MULTITHREADED))中使用对象时效率最高。
但是如果将COM类的ThreadingModel="Apartment",同样可以在多线程环境中使用,COM会自动将多线程的访问序列化成单线程访问,只是效率会比较低。
[/Quote]
fredhong
2009-03-13
打赏
举报
回复
COM组件要支持多线程的话,可以将COM类的ThreadingModel="Free",同时在实现类时做好并发控制,这样当使用者在多线程环境(CoInitializeEx(0, COINIT_MULTITHREADED))中使用对象时效率最高。
但是如果将COM类的ThreadingModel="Apartment",同样可以在多线程环境中使用,COM会自动将多线程的访问序列化成单线程访问,只是效率会比较低。
掌握V
C++
6.0与MFC的入门教程
本教程介绍了V
C++
6.0和MFC。V
C++
6.0是经典集成
开发
环境,MFC是其
C++
类库,封装Windows API。教程涵盖MFC基础知识、应用
程序
结构、
开发
流程和主要
组件
,强调其优势,能提升V
C++
编程和Windows应用
开发
能力。
基于V
C++
6.0的多媒体播放器设计与实现——VC播放器2.0实战项目
本文介绍基于V
C++
6.0和MFC框架的多媒体播放器设计与实现,涵盖MFC核心机制、DirectShow媒体解码、
多线程
架构、消息循环控制及播放列表管理等关键技术。项目通过整合Windows API与
COM
组件
,构建稳定高效的本地音视频播放系统,适用于教学与工程实践。
全面掌握ATL编程的V
C++
开发
指南
本文深入介绍了ATL编程的核心概念、设计原则,并指导如何利用ATL构建各种
COM
组件
。内容涵盖
COM
基础、ATL项目结构、接口实现、事件处理、服务器与客户端创建、
COM
+集成、与MFC结合,以及优化和线程模型的详细说明。通过学习ATL
开发
,
开发
者将能够高效创建性能优越的
COM
组件
。
实现
COM
口自动识别与界面显示的V
C++
项目教程
本文围绕V
C++
开发
环境,详细介绍实现自动识别
COM
端口并显示在界面的方法。涵盖
COM
端口枚举,包括不同系统的方法及硬件探测技术;设备信息查询,含标准接口、驱动获取及高级应用;还涉及硬件ID解析、界面控件显示、事件处理等,强调
多线程
安全与界面友好性。
V
C++
6.0 企业版软件深入体验与应用
Microsoft Visual
C++
6.0是强大的可视化
C++
编程环境,其企业版功能完整。本文深入介绍了V
C++
6.0企业版的历史、特色、集成
开发
环境、MFC库应用、调试器特点、资源编辑器使用及系统兼容性等内容,还提及安装配置、安全更新等问题及应对策略。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章