【问题标题】:Out-of-process COM singletons进程外 COM 单例
【发布时间】:2012-08-02 19:21:40
【问题描述】:

我正在处理一个单线程库(不是线程安全的),我想将它包装在一个 COM 进程外对象中以解决其线程不安全问题。我需要一种行为,其中每个新 COM 对象都在其自己的进程中实例化 - 某种形式的进程外单例。

自从我处理核心 COM 以来已经有一段时间了,所以我不确定如何处理这个问题,或者如果没有一些技巧,这是否可能。

【问题讨论】:

    标签: c++ com atl out-of-process


    【解决方案1】:

    调用 CoRegisterClassObject() 并将 REGCLS 参数设置为 REGCLS_SINGLEUSE。注意成本,进程不是廉价的操作系统对象。

    您没有理由不能确保封送的方法调用是线程安全的,只需调用 CoInitializeEx() 来请求 STA。在进程外服务器中的工作与在进程内服务器中一样好。如果您这样做只是为了解决线程问题,那么绝对支持进程内 STA。需要消息循环。

    【讨论】:

    • 谢谢!我知道进程很昂贵,但这是使用这个线程不安全库的唯一方法。我了解 STA 要求,但您能否详细说明多个 CoCreateInstance() 将如何将封送指针返回到多个进程中的对象?每个调用都会产生一个新进程吗?
    • 是的,REGCLS_SINGLEUSE 强制创建一个新进程。避免假设线程不安全库有什么特别之处,实际上所有重要的库都是线程不安全的。这就是为什么 STA 首先存在的原因。 S 和 T 表示单线程。
    猜你喜欢
    • 2013-01-26
    • 2014-02-18
    • 1970-01-01
    • 2011-11-20
    • 2013-01-20
    • 2012-09-06
    • 2011-02-26
    • 2011-06-09
    • 2015-05-23
    相关资源
    最近更新 更多