Поделиться через


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

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

Диаграмма, показывающая коллекцию контекстов в одной активности, внутри квартиры, внутри процесса.

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

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

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

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

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

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

процессы, потоки и аппартаменты

ThreadingModel