Основы COM. Рудалев В.Г - 15 стр.

UptoLike

15
Имеются следующие потоковые модели :
Однопоточная (Single). Весь COM-сервер (т.е. все создаваемые им экзем -
пляры объектов ) выполняется в одном потоке.
Раздельная (apartment). Эту модель также называют однопоточно -
раздельной (singlethreaded apartment, STA). Каждый экземпляр объекта
выполняется в своем собственном потоке . Локальные данные потоков
при этом защищены автоматически . Любые глобальные переменные, со -
вместно используемые несколькими экземплярами объекта , должны за-
щищаться самостоятельно с помощью методов синхронизации (семафо-
ров , критических секций и др.)
Свободная (Free). Иначе называется многопоточно- раздельной (multi-
threaded apartment, MTA). Клиент может вызвать метод объекта в любом
потоке в любое время. Объекты должны самостоятельно защищать также
и свои локальные данные от одновременного доступа из нескольких по-
токов .
Обе модели (Both). Поддерживаются обе предыдущие модели .
Использовать две последних модели без особой необходимости не рекоменду-
ется, так это чревато возникновением ошибок.
Более подробно с вопросами многопоточности в COM можно ознакомиться по
книге [2].
2. Примеры программирования
2.1. Создание внешнего сервера и контроллера автоматизации
2.1.1. Создание сервера
Откройте новый проект . Измените заголовок и имя формы Сервер запущен,
MainForm.
Сохраните проект (имя Sa.dpr) и модуль (имя SrvMain).
Назначение этого проекта запуск сервера и отображение полученных им от
клиента данных. В адресном пространстве сервера (sa.exe) по запросу клиента
будет создаваться COM-объект.
В общем случае исходный проект может содержать процедуры и методы, ко -
торые на следующем шаге можно включить в состав интерфейсов , т.е. преобра -
зовать исходную программу в COM-сервер.
                                           15
И мею тсяслед ую щ и епотоков ы емод ели :
   • О д нопоточная (Single). В есь COM-сервер(т.е. в сесоз д ав аемы еи м экзем-
      пляры объектов ) в ы полняетсяв од ном потоке.
   • Раз д ельная (apartment). Э ту мод ель такж е наз ы в аю т од нопоточно-
      раз д ельной (singlethreaded apartment, STA). К аж д ы й экземпляр объекта
      в ы полняется в св оем собств енном потоке. Л окальны е д анны е потоков
      при этом з ащ и щ ены ав томати чески . Л ю бы е глобальны е переменны е, со-
      в местно и спольз уемы е нескольки ми экземплярами объекта, д олж ны з а-
      щ и щ аться самостоятельно с помощ ью метод ов си нхрони з аци и (семафо-
      ров , кри ти чески х секци й и д р.)
   • Св обод ная (Free). И наче наз ы в ается многопоточно-раз д ельной (multi-
      threaded apartment, MTA). К ли ент мож ет в ы з в ать метод объекта в лю бом
      потокев лю боев ремя. О бъекты д олж ны самостоятельно з ащ и щ ать такж е
      и св ои локальны е д анны е от од нов ременного д оступа и з нескольки х по-
      токов .
   • О бемод ели (Both). Под д ерж и в аю тсяобепред ы д ущ и емод ели .
И спольз ов ать д в епослед ни х мод ели без особой необход и мости нерекоменд у-
ется, такэто чрев ато в оз ни кнов ени ем ош и бок.
Болеепод робно с в опросами многопоточности в COM мож но оз накоми тьсяпо
кни ге[2].

2. П ри м е ры програм м и ров ани я
2.1. Создани е в не ш не госе рв е ра и к онт ро
                                               лле ра ав т о
                                                           м ат и заци и
2.1.1. Соз д ани есервера
О ткрой тенов ы й проект. И з мени тез аголов оки и мя формы –Серверз апущ ен,
MainForm.




Сохрани тепроект(и мяSa.dpr) и мод уль (и мяSrvMain).
Н аз начени е этого проекта – з апусксервера и отображ ени е полученны х и м от
кли ента д анны х. В ад ресном пространств е сервера (sa.exe) по з апросу кли ента
буд ет соз д ав атьсяCOM-объект.
В общ ем случае и сход ны й проект мож ет сод ерж ать процед уры и метод ы , ко-
торы ена след ую щ ем ш агемож но в клю чи ть в состав и нтерфей сов , т.е. преобра-
з ов ать и сход ную программу в COM-сервер.