ATL e marshaler livre de threads

A página Atributos do Assistente de Objeto Simples da ATL fornece uma opção que permite que a classe agregue o FTM (marshaler livre de threads).

O assistente gera código para criar uma instância do marshaler livre de threads no FinalConstruct e liberar essa instância em FinalRelease. Uma macro COM_INTERFACE_ENTRY_AGGREGATE é adicionada automaticamente ao mapa COM para garantir que as solicitações QueryInterface de IMarshal sejam manipuladas pelo marshaler livre de threads.

O marshaler livre de threades permite acesso direto a interfaces em seu objeto por qualquer thread no mesmo processo, acelerando as chamadas entre apartamentos. Essa opção destina-se a classes que usam o modelo de threading Both.

Ao usar essa opção, as classes devem assumir a responsabilidade pela segurança do thread dos dados. Além disso, os objetos que agregam o marshaler livre de thread e precisam usar ponteiros de interface obtidos de outros objetos, devem executar etapas extras para garantir que as interfaces realizem marshaling corretamente. Normalmente, isso envolve armazenar os ponteiros da interface na tabela de interface global (GIT) e obter o ponteiro da GIT sempre que ele for usado. A ATL fornece a classe CComGITPtr para ajudar você a usar ponteiros de interface armazenados na GIT.

Confira também

Conceitos
CoCreateFreeThreadedMarshaler
IMarshal
Quando usar a Tabela de Interface Global
Problemas de threading do servidor em processo