Модели потоков COM+

Модели потоков COM+ предназначены для коллекции объектов, называемой квартирой. Квартира представляет собой коллекцию контекстов, содержащихся в процессе, как показано на следующем рисунке.

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

Вызовы в квартире прямые, а звонки между квартирами (вне процесса) являются косвенными и требуют прокси-сервера и заглушки кода. Квартиры позволяют объектам с различными свойствами синхронизации и повторного входа и имеют две категории: однопоточные и многопоточные. Объекты в однопоточной квартире (STA) выполняются в определенном потоке, в котором они были созданы. Маркеры обслуживания позволяют одновременно выполнять только один метод. Они предназначены для пользовательских интерфейсов и используют очередь сообщений Microsoft Windows для обработки входящих вызовов.

Объекты в многопоточной квартире (MTA) выполняются в любом потоке и позволяют одновременно выполнять любое количество методов. MTAs поддерживает повторение неявно.

Классы COM+ помечены свойством ThreadingModel , которое позволяет COM+ создавать объект в соответствующей квартире. Чтобы определить, в какой квартире создается объект, CoCreateInstance использует свойство ThreadingModel .

Потоки должны вызывать CoInitializeEx , прежде чем они смогут использовать COM+. Это создает их внутри правильной квартиры и контекста. Основная квартира потока определяется как первая STA, называемая CoInitializeEx. Обычно это связано с основным потоком процесса. CoInitializeEx указывает тип квартиры, необходимой потоком, задав следующие флаги:

  • COINIT_MULTITHREADED— находит поток в одной многопоточной квартире.
  • COINIT_APARTMENTTHREADED— помещает поток в новый STA.

В следующих разделах этого раздела содержатся дополнительные сведения об использовании моделей потоков и квартир в COM+:

Процессы, потоки и квартиры

ThreadingModel