ATL и упаковщик в режиме свободного потока
Страница атрибутов мастера простых объектов ATL предоставляет параметр, позволяющий классу агрегировать бесплатный маршалер с потоком (FTM).
Мастер создает код для создания экземпляра маршалера FinalConstruct
с бесплатным потоком и выпуска этого экземпляра.FinalRelease
Макрос COM_INTERFACE_ENTRY_AGGREGATE автоматически добавляется на карту COM, чтобы убедиться, что QueryInterface
запросы для IMarshal обрабатываются бесплатным маршалером с потоком.
Бесплатный маршализатор потоков позволяет напрямую обращаться к интерфейсам объекта из любого потока в одном процессе, ускоряя межквартирные вызовы. Этот параметр предназначен для классов, использующих модель потоков обоих потоков.
При использовании этого параметра классы должны отвечать за безопасность потоков данных. Кроме того, объекты, которые агрегируют бесплатный маршалер потоков и должны использовать указатели интерфейса, полученные от других объектов, должны предпринять дополнительные шаги, чтобы обеспечить правильность маршалирования интерфейсов. Обычно это включает хранение указателей интерфейса в глобальной таблице интерфейсов (GIT) и получение указателя из GIT при каждом использовании. ATL предоставляет класс CComGITPtr для использования указателей интерфейса, хранящихся в GIT.
См. также
Основные понятия
CoCreateFreeThreadedMarshaler
IMarshal
Когда следует использовать глобальную таблицу интерфейсов
Проблемы с потоковой обработкой сервера