Модели потоков
Каждый СОМ-объект
работает с отдельной моделью
потоков, которая определяет, каким
образом объект может существовать
в многопоточной среде. Когда
СОМ-сервер зарегистрирован в
системе, каждый из СОМ-объектов.
содержащихся в этом сервере, должен
зарегистрировать поддерживаемую
им модель потоков. Для СОМ-объектов,
созданных в Delphi,
модель потока выбирается при
выполнении последовательности
действий мастеров Automation, ActiveX
control или СОМ
objects, тем самым
определяя, как будет
зарегистрирован элемент
управления. Существуют следующие
модели потоков СОМ:
?
Единичная. Весь СОМ-сервер
выполняется в одном
потоке.? Комната,
также известная как однопоточная
комната [single-threaded
apartment-STA). Каждый
СОМ-объект выполняется в
контексте собственного
потока, и в отдельном
потоке могут выполняться
несколько экземпляров
одинаковых типов
СОМ-объекта. В результате
любые данные,
распределенные между
экземплярами объектов
(такие как глобальные
переменные), должны быть
при необходимости
защищены синхронизирующим
потоком объектов.
?
Свободная, также известная
как многопоточная
комната (multithreading
apartment- МТА).
Клиент может вызвать метод
объекта в любом потоке и в
любое время. В этом| случае
СОМ-объект должен защищать
свои данные при
одновременном доступе из
нескольких потоков.
? Обе.
Поддерживаются обе модели
потоков (комната и
свободная).
Необходимо
запомнить, что выбор желаемой
модели потоков в диалоговом окне
мастера не гарантирует, что
СОМ-объект будет сохранен в этой
модели потоков. Для поддержки
определенной модели потоков
необходимо написать код,
гарантирующий, что СОМ-сервер будет
правильно оперировать этой
моделью. Практически всегда при
этом необходимо использовать поток
синхронизации объектов для защиты
доступа к глобальным данным или
данным экземпляров в СОМ-объектах.
|