c++ - STA(单线程单元)COM 对象 - 生成工作线程?

标签 c++ multithreading com

在您的 STA COM 对象中生成工作线程(即 COM 对象创建一个线程来执行任务)是不是一件坏事?我认为,答案是 - 这取决于!

以我为例: 我使用的工作线程不会干扰/访问 COM 或 COM 服务。

我问这个的原因是因为根据 STA COM 定义,STA 只能容纳一个线程。产生多个线程有点违背这个原则,除非工作线程和它们的工作不干扰/处理 COM/COM 服务。 在这种情况下,我认为这完全没问题,而且在我看来,工作线程不应被 COM 视为逻辑 STA 的一部分。

你对此有何看法?

最佳答案

不,这不是一件坏事。单元明确存在以帮助您使多线程代码工作。 STA 线程是非线程安全的 COM 服务器的安全之家,COM 的单元线程模型确保它始终以线程安全的方式使用。您所要做的就是编码要在工作线程中使用的接口(interface)指针(例如 IGlobalInterfaceTable),您可以调用这些方法而无需执行任何特殊操作。

当然,这不是免费的,编码调用会产生开销。多少取决于 STA 线程在泵送其消息循环时的响应程度。如果您打算显式创建工作线程以以多线程方式使用该 COM 服务器,那么您当然不会领先,您让它变慢了。

关于c++ - STA(单线程单元)COM 对象 - 生成工作线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5423077/

相关文章:

c++ - 在 C++ 中不使用 CLSID 和注册表获取 COM 对象的 DLL 文件

c++ - 结构与 vector 作为数据持有者

python - Python 中可变数据的重复数据删除/合并

c++ - 将字符串变量的值与一些文本链接起来,并将其打印到 C++ 中的标准输出

android - 如何显示进度条?

c++ - 生产者/消费者堆栈中竞争条件的原因

c# - 在可执行文件中包含引用

windows - 通过 PowerShell 加载类型库并编写 Windows Live Writer 脚本

c++ - 在 QTableView 模型字段中显示图像和文本

c++ - 使用公钥进行 RSA 加密。基于键的数据大小