Condividi tramite


ATL e il gestore del marshalling con modello di threading Free

La pagina Attributi della Creazione guidata oggetti semplici ATL offre un'opzione che consente alla classe di aggregare il gestore di marshalling a thread libero (FTM).

La procedura guidata genera codice per creare un'istanza del gestore di marshalling a thread libero in FinalConstruct e rilasciare tale istanza in FinalRelease. Una macro COM_INTERFACE_ENTRY_AGGREGATE viene aggiunta automaticamente alla mappa COM per garantire che QueryInterface le richieste per IMarshal vengano gestite dal gestore di marshalling thread libero.

Il gestore di marshalling a thread libero consente l'accesso diretto alle interfacce sull'oggetto da qualsiasi thread nello stesso processo, velocizzando le chiamate tra apartment. Questa opzione è destinata alle classi che usano entrambi il modello di threading.

Quando si usa questa opzione, le classi devono assumere la responsabilità della thread-safety dei dati. Inoltre, gli oggetti che aggregano il gestore di marshalling a thread libero e devono usare puntatori di interfaccia ottenuti da altri oggetti devono eseguire passaggi aggiuntivi per garantire che il marshalling delle interfacce sia corretto. In genere questo comporta l'archiviazione dei puntatori di interfaccia nella tabella dell'interfaccia globale (GIT) e il recupero del puntatore da GIT ogni volta che viene usato. ATL fornisce la classe CComGITPtr che consente di usare i puntatori di interfaccia archiviati in GIT.

Vedi anche

Concetti
CoCreateFreeThreadedMarshaler
IMarshal
Quando usare la tabella dell'interfaccia globale
Problemi di threading del server in-process