gpt4 book ai didi

c++ - 来自多个线程的 COM 调用

转载 作者:行者123 更新时间:2023-11-30 03:09:54 25 4
gpt4 key购买 nike

如果我从多个线程调用同一个 COM 函数到进程中的 COM Dll,线程安全性如何?

COM DLL 中的所有对象是否也需要线程安全才能可靠地工作?

最佳答案

COM 代表 COM 服务器处理线程。服务器通过 ThreadingModel 注册表项发布它支持的线程类型。非常常见的设置是公寓或两者。免费是非常罕见的。缺少 key 相当于公寓。

COM 需要用于单元线程服务器的单线程单元 (STA)。如果您不提供(CoInitialize/Ex 调用),那么它将为服务器创建一个专用线程。 STA 线程的硬性要求是它还提供 Windows 消息循环。消息循环是 COM 自动编码从一个线程到另一个线程的方法调用的机制。

因此,您问题的一般答案是,是的,它通常是线程安全的。仍然有可能出错的地方。当从工作线程进行调用但 STA 线程未进行泵送时,可能会发生死锁。或者服务器可能对它注册的 ThreadingModel 撒谎。在 .NET 中实现的服务器并不少见。它们被注册为 Both,但实际上线程安全的 .NET 类很少。

关于c++ - 来自多个线程的 COM 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3699343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com