ATL et le marshaleur libre de threads

La page Attributs de l’Assistant Objet simple ATL fournit une option qui permet à votre classe d’agréger le marshaleur thread libre (FTM).

L’Assistant génère du code pour créer une instance du marshaleur thread libre dans FinalConstruct et libérer cette instance dans FinalRelease. Une macro COM_INTERFACE_ENTRY_AGGREGATE est automatiquement ajoutée à la carte COM pour vous assurer que QueryInterface les demandes d’IMarshal sont gérées par le marshaleur threadé libre.

Le marshaleur thread libre autorise l’accès direct aux interfaces sur votre objet à partir de n’importe quel thread du même processus, accélérant ainsi les appels inter-appartements. Cette option est destinée aux classes qui utilisent le modèle de threading.

Lorsque vous utilisez cette option, les classes doivent assumer la responsabilité de la sécurité des threads de leurs données. En outre, les objets qui agrègent le marshaleur thread libre et doivent utiliser des pointeurs d’interface obtenus à partir d’autres objets doivent prendre des mesures supplémentaires pour s’assurer que les interfaces sont correctement marshalées. En règle générale, cela implique le stockage des pointeurs d’interface dans la table d’interface globale (GIT) et l’obtention du pointeur à partir du GIT chaque fois qu’il est utilisé. ATL fournit la classe CComGITPtr pour vous aider à utiliser des pointeurs d’interface stockés dans git.

Voir aussi

Concepts
CoCreateFreeThreadedMarshaler
IMarshal
Quand utiliser la table d’interface globale
Problèmes de thread de serveur in-process