【发布时间】:2012-08-02 19:21:40
【问题描述】:
我正在处理一个单线程库(不是线程安全的),我想将它包装在一个 COM 进程外对象中以解决其线程不安全问题。我需要一种行为,其中每个新 COM 对象都在其自己的进程中实例化 - 某种形式的进程外单例。
自从我处理核心 COM 以来已经有一段时间了,所以我不确定如何处理这个问题,或者如果没有一些技巧,这是否可能。
【问题讨论】:
标签: c++ com atl out-of-process
我正在处理一个单线程库(不是线程安全的),我想将它包装在一个 COM 进程外对象中以解决其线程不安全问题。我需要一种行为,其中每个新 COM 对象都在其自己的进程中实例化 - 某种形式的进程外单例。
自从我处理核心 COM 以来已经有一段时间了,所以我不确定如何处理这个问题,或者如果没有一些技巧,这是否可能。
【问题讨论】:
标签: c++ com atl out-of-process
调用 CoRegisterClassObject() 并将 REGCLS 参数设置为 REGCLS_SINGLEUSE。注意成本,进程不是廉价的操作系统对象。
您没有理由不能确保封送的方法调用是线程安全的,只需调用 CoInitializeEx() 来请求 STA。在进程外服务器中的工作与在进程内服务器中一样好。如果您这样做只是为了解决线程问题,那么绝对支持进程内 STA。需要消息循环。
【讨论】: