ATL y el contador de referencias de subprocesamiento libre
La página Atributos del Asistente para objetos simples ATL ofrece una opción que permite que la clase agregue el serializador de subprocesos libres (FTM, “Free Threaded Marshaler”).
El asistente genera código para crear una instancia del serializador de subprocesos libre en FinalConstruct
y liberar esa instancia en FinalRelease
. Se agrega automáticamente una macro COM_INTERFACE_ENTRY_AGGREGATE al mapa COM para asegurarse de que las solicitudes de QueryInterface
para IMarshal se controlan mediante el serializador de subprocesos libre.
El serializador de subprocesos libre permite el acceso directo a las interfaces del objeto desde cualquier subproceso del mismo proceso, lo que acelera las llamadas entre apartamentos. Esta opción está pensada para clases que usan el modelo de subprocesos dual.
Al usar esta opción, las clases deben asumir la responsabilidad de la seguridad de subprocesos de sus datos. Además, los objetos que agregan el serializador de subprocesos libre y necesitan usar punteros de interfaz obtenidos de otros objetos deben realizar pasos adicionales para garantizar que las interfaces se serializaron correctamente. Normalmente, esto implica almacenar los punteros de interfaz en la tabla de interfaz global (GIT) y obtener el puntero de GIT cada vez que se usa. ATL proporciona la clase CComGITPtr para ayudarle a usar punteros de interfaz almacenados en GIT.
Consulte también
Conceptos
CoCreateFreeThreadedMarshaler
IMarshal
Cuándo usar la tabla de interfaz global
Problemas de subprocesos del servidor en proceso