VC++ 6 开发COM组件程序,需要支持被多线程调用。

Z.&.Q 2009-03-13 02:06:25
VC++ 6 开发COM组件程序,需要支持被多线程调用。
也就是,COM组件如何支撑Multi-Instance。
有了解的高手吗?
...全文
332 7 打赏 收藏 转发到动态 举报
写回复
用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]
  • 打赏
  • 举报
回复
up
Z.&.Q 2009-03-13
  • 打赏
  • 举报
回复
首先,谢谢楼上两位的回答。好像都有道理。
其实,我就是想知道,我开发的这个COM组件程序,是否需要做一些特殊的设置,好让调用我这个COM组件程序的多线程程序能够正常使用。如2楼说的设置ThreadingModel="Free",通过CoInitializeEx(0, COINIT_MULTITHREADED)初始化等等。其他的还有需要特殊处理的地方?
吗?

另外,关于3楼说的内容
-〉2. 实例应该尽量访问非全局数据,不得操空全局数据。如果一定要操空全局数据,必须使用锁进行并发控制
这个应该是调用我的COM组建的多线程程序应该考虑的巴?不是我COM组件中考虑的吧?

非常感谢 fredhong和阿荣你们能回答。
  • 打赏
  • 举报
回复
帮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会自动将多线程的访问序列化成单线程访问,只是效率会比较低。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧