Re: Регистрация объектов в неглавном потоке. Как?
От: Andrey_Ponyakov  
Дата: 10.04.06 07:11
Оценка:
Здравствуйте, Стрелок, Вы писали:

С>ATL-визард создает модуль (AtlModule) в главном потоке программы. Поэтому, все обращения к объектам нужно вести в главном потоке. Для вызова объекта из другого потока нужно пользоваться очередью сообщений (PostMessage/SetEvent/WaitForSingleObject) или маршалингом объектной ссылки(CoMarshalInterThreadInterfaceInStream). В связи с этим у меня вопросы:

С>1. Достаточно ли один раз отмаршалить интерфейс в другой поток или же это нужно делать каждый раз при вызове?

Если у вас потоки в разных апартментах (почитать можно здесь
Автор(ы): Jeff Prosise
Дата: 22.02.2001

В этой статье подробно рассматриваются подразделения (apartments) в модели
COM. Автор описывает различные виды подразделений, показывает, каким образом
подразделения назначаются потокам и объектам, а также даёт ряд полезных
советов, которые позволят вам избежать ошибок при работе с подразделениями.
), то нужно маршалить указатель на интерфейс в другой поток один раз.

С>2. Можно ли создать AtlModule и все объекты в другом потоке, чтобы вовсе забыть о межпоточных взаимодействиях?


Не знаю. Можно создавать обьекты с помощью CoCreateInstance в другом потоке и не маршалить вызовы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.