Шаг 289.
Модели потоков. Инициализация СОМ (окончание)

    На этом шаге мы рассмотрим особенности создание различных моделей потоков.

    Отдельного обсуждения заслуживает инициализация модели потоков СОМ для сервера, реализованного в виде DLL. Дело в том, что библиотека DLL может быть загружена любым потоком, который уже ранее создал свой апартамент. Поэтому сервер в виде DLL не может сам проинициализировать требуемую ему модель потоков. Вместо этого сервер при регистрации прописывает в реестре параметр ThreadingModel, который и указывает, в какой модели потоков способен работать данный сервер. При создании сервера СОМ анализирует значение этого параметра и при необходимости создает для сервера апартамент с требуемой моделью потоков (рисунок 1).


Рис.1. Запись в системном реестре, определяющая модель потоков внутрипроцессного сервера

    Параметр ThreadingModel может принимать следующие значения:

    Если параметр ThreadingModel не задан, сервер по умолчанию получает модель одного потока. В этом случае он создается в главном (primary) однопоточном апартаменте (то есть в STA потока, который первым вызвал процедуру CoInitialize), даже если создание сервера запрошено из потока, имеющего собственный однопоточный апартамент.

    При создании СОМ-сервера средствами Delphi его модель потоков задается в мастере COM Object Wizard (рисунок 2).


Рис.2. Выбор модели потоков на этапе создания СОМ-сервера

    Обсудим значения, доступные в раскрывающемся списке Threading Model и определяющие модель потоков сервера (действие выбранного значения зависит от типа сервера - ЕХЕ или DLL).

    При выборе значения в раскрывающемся списке Threading Model не предпринимается никаких дополнительных действий по обеспечению корректности работы создаваемого сервера в выбранной модели потоков. Поэтому вы сами должны продумать, какие потоки могут быть созданы в вашем приложении, и предпринять меры по их синхронизации. Общие правила, которые при этом надо учитывать, перечислены ниже.

    Следует немного подробнее остановиться на модели нейтральных потоков. Эта модель работает под управлением СОМ+; при отсутствии поддержки этой технологии она будет использоваться как модель разделенных потоков. Так же как и в модели свободных потоков, клиенты могут обращаться к методам из разных потоков. Отличие модели нейтральных потоков от модели свободных потоков заключается в следующем: метод сервера всегда вызывается в контексте вызывающего потока. Требования к объекту при его разработке такие же, как к объекту с моделью смешанных потоков. Далее рассматриваются вопросы синхронизации процессов и потоков в Windows. Эти вопросы не являются уникальными для СОМ-приложений и касаются любых многопоточных приложений.

    Со следующего шага мы начнем рассмотривать синхронизацию процессов.




Предыдущий шаг Содержание Следующий шаг