Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Основные определения. Многие функции для работы с технологией COM представлены в библиотеке ole32.dll (ole2.dll), для их использования необходимо:

УПРАВЛЕНИЕ ПОТОКАМИ COM

Реализация COM

Многие функции для работы с технологией COM представлены в библиотеке ole32.dll (ole2.dll), для их использования необходимо:

1. Проверить, совпадает ли функция с библиотекой COM;

2. Инициализировать библиотеку COM;

3. Освободить ресурсы библиотеки, когда она больше не понадобится.

Также важный момент в программировании с помощью технологии COM – это то, что каждому вызову инициализации, должен соответствовать вызов деинициализации.

CoInitialize();

CoUninitialize();


Для начала, необходимо напомнить, какие типы серверов COM могут быть:

1. Сервер в процессе (in-proc);

2. Локальный (local);

3. Удаленный (remote).

Первый тип серверов реализуется с помощью динамической библиотеки dll. Второй и третий типы могут быть реализованы в виде исполняемых файлов exe.

Локальный означает то, что EXE-модуль сервера будет запускаться на той же машине, что и клиент. Точно также как и in-proc, с единственным различием – in-proc DLL будет загружена в адресное пространство клиента, в то время как local будет запущен отдельным процессом.

Удаленный - это исполняемый модуль, запускаемый на другой машине, следовательно, для его работы необходимо указать имя хоста, на котором предполагается запустить сервер.

При использовании in-proc серверов проблем не возникает с многопоточностью, в отличие от использования различных exe-модулей.

Многопоточные приложения имеют два основных подводных камня: взаимоблокировки (deadlocks) и гонки (races).

Взаимоблокировка происходит, когда один поток ожидает от другого каких-то действий, а тот, в свою очередь, ждет некоторых действий от первого.

Состояние гонок возникает, если один поток заканчивает свою работу раньше, чем другой, от которого он зависит. Из-за этого первый поток получает мусор вместо результатов, ибо второй еще не предоставил верных.

COM помогает предотвратить взаимоблокировки вызовов объектов. Существуют и некоторые функции, созданные для предотвращения состояния гонок во внепроцессных серверах.

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

Стоит сказать и том, что многопоточность сама по себе не гарантирует лучшей производительности. Поскольку создание и синхронизация потоков – сложные задачи, использование многопоточности часто порождает проблемы производительности. Несколько потоков следует использовать только в том случае, когда вы твердо знаете, что делаете.

Самый простой путь понять архитектуру потоков, принятую в COM – это представить, что все COM-объекты в процессе разделены на группы, называемые апартаментами (apartments). COM-объекты всегда живут в одном апартаменте, в том смысле, что их методы могут быть легально вызваны только потоком, принадлежащим этому апартаменту. Любой другой поток, желающий вызвать объект, должен делать это через proxy.

Существует два типа апартаментов: однопоточные апартаменты (single-threaded apartments, STA) и многопоточные апартаменты (multi-threaded apartments, MTA).

<== предыдущая лекция | следующая лекция ==>
Интерфейс IUnknown | Однопоточные апартаменты (STA)
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 677; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.