Модели потоков COM+
Модели потоков COM+ предназначены для коллекции объектов, называемой квартирой. Квартира представляет собой коллекцию контекстов, содержащихся в процессе, как показано на следующем рисунке.
Вызовы в квартире прямые, а звонки между квартирами (вне процесса) являются косвенными и требуют прокси-сервера и заглушки кода. Квартиры позволяют объектам с различными свойствами синхронизации и повторного входа и имеют две категории: однопоточные и многопоточные. Объекты в однопоточной квартире (STA) выполняются в определенном потоке, в котором они были созданы. Маркеры обслуживания позволяют одновременно выполнять только один метод. Они предназначены для пользовательских интерфейсов и используют очередь сообщений Microsoft Windows для обработки входящих вызовов.
Объекты в многопоточной квартире (MTA) выполняются в любом потоке и позволяют одновременно выполнять любое количество методов. MTAs поддерживает повторение неявно.
Классы COM+ помечены свойством ThreadingModel , которое позволяет COM+ создавать объект в соответствующей квартире. Чтобы определить, в какой квартире создается объект, CoCreateInstance использует свойство ThreadingModel .
Потоки должны вызывать CoInitializeEx , прежде чем они смогут использовать COM+. Это создает их внутри правильной квартиры и контекста. Основная квартира потока определяется как первая STA, называемая CoInitializeEx. Обычно это связано с основным потоком процесса. CoInitializeEx указывает тип квартиры, необходимой потоком, задав следующие флаги:
- COINIT_MULTITHREADED— находит поток в одной многопоточной квартире.
- COINIT_APARTMENTTHREADED— помещает поток в новый STA.
В следующих разделах этого раздела содержатся дополнительные сведения об использовании моделей потоков и квартир в COM+:
См. также