c++ - 进程外 COM 服务器 - 函数调用和线程

标签 c++ com multithreading

当您有一个进程外的 COM 服务器,并且您从客户端中的线程 X 调用该服务器中的客户端函数时,那么该函数如何在 COM 服务器中执行?

在当前正在执行的线程中,还是在其主线程中?

最佳答案

遵守正常的 COM 单元线程规则。如果对象是由客户端在 STA 单元中创建的,那么您的客户端线程需要使用编码接口(interface)指针,否则它会获取 RPC_E_WRONG_THREAD。实际的方法调用将在服务器的 STA 线程中执行,它需要泵送一个消息循环才能工作。执行是序列化的,不需要锁定。

如果它位于 MTA 单元中,则方法调用将在任意 RPC 工作线程上执行。并且您需要采取通常的线程预防措施。

关于c++ - 进程外 COM 服务器 - 函数调用和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2928713/

相关文章:

c++ - 在 OS X 10.8 上使用 SDL 2 启动速度非常慢

c++ - 线程的内存问题

c++ - 追踪 COM 接口(interface)/SysAlloc 泄漏

c++ - c\c++中线程和并发中一本好的编程书籍推荐

c++ - 我想制作一个没有任何可视对话框的程序

c# - 使用 COM Interop 将对象从 C# 传递到 VBA

windows-7 - Powershell COM 对象 HRESULT 异常 : 0x80010108 (RPC_E_DISCONNECTED)

c++ - 当只有一个线程写入 c++ 中的 bool 变量时,是否可能出现竞争条件?

c# - 使用多个参数启动任务的标准做法是什么

c++ - 如何在函数模板的显式特化中推导模板参数?