在您的 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/