COM+ 线程模型

COM+ 线程模型围绕称为单元的对象集合设计。 单元是进程中包含的上下文的集合,如下图所示。

Diagram that shows a collection of contexts in an activity, within an apartment, within a process.

单元内的调用是直接调用,而跨单元(进程外)的调用是间接调用,需要代理和存根代码。 单元允许具有不同同步和重入属性的对象,并且具有两个类别:单线程和多线程。 单线程单元 (STA) 中的对象在用于创建它们的特定线程上执行。 STA 一次仅允许执行一个方法。 它们专为用户界面设计,并依赖于 Microsoft Windows 消息队列来处理传入调用。

多线程单元 (MTA) 中的对象在任何线程上执行,并允许同时执行任意数量的方法。 MTA 隐式支持重入。

COM+ 类使用 ThreadingModel 属性进行标记,该属性允许 COM+ 在适当的单元中创建对象。 若要确定在哪个单元中创建对象,CoCreateInstance 会使用 ThreadingModel 属性。

线程必须先调用 CoInitializeEx,然后才能使用 COM+。 这会在正确的单元和上下文中创建它们。 主线程单元被确定为 CoInitializeEx 调用的第一个 STA。 这通常与进程的主线程相关联。 CoInitializeEx 通过设置以下标志指示线程所需的单元类型:

  • COINIT_MULTITHREADED - 在单个多线程单元中找到线程。
  • COINIT_APARTMENTTHREADED - 将线程置于新的 STA 中。

本部分中的以下主题提供有关在 COM+ 中使用线程模型和单元的详细信息:

进程、线程和单元

ThreadingModel