Modelli di threading COM+
I modelli di threading COM+ sono progettati intorno a una raccolta di oggetti denominata apartment. Un apartment è una raccolta di contesti contenuti in un processo, come illustrato nella figura seguente.
Le chiamate all'interno di un appartamento sono dirette, mentre le chiamate tra appartamenti (out-of-process) sono indirette e richiedono codice proxy e stub. Gli appartamenti consentono oggetti con diverse proprietà di sincronizzazione e reentrancy e hanno due categorie: a thread singolo e multithreading. Gli oggetti in un apartment a thread singolo (STA) vengono eseguiti sul thread specifico in cui sono stati creati. Gli stA consentono l'esecuzione di un solo metodo alla volta. Sono progettati per interfacce utente e si basano sulla coda dei messaggi di Microsoft Windows per elaborare le chiamate in ingresso.
Gli oggetti in un apartment multithreading (MTA) vengono eseguiti su qualsiasi thread e consentono l'esecuzione simultanea di qualsiasi numero di metodi. Gli MTA supportano implicitamente la reentrance.
Le classi COM+ sono contrassegnate con una proprietà ThreadingModel che consente a COM+ di creare l'oggetto nell'apartment appropriato. Per determinare l'apartment in cui viene creato un oggetto, CoCreateInstance usa la proprietà ThreadingModel.
I thread devono chiamare CoInitializeEx prima di poter usare COM+. Questo li crea all'interno dell'appartamento e del contesto corretti. L'apartment del thread principale è determinato come il primo STA chiamato da CoInitializeEx. Questa operazione è in genere associata al thread principale di un processo. CoInitializeEx indica il tipo di apartment richiesto dal thread impostando i flag seguenti:
- COINIT_MULTITHREADED: individua il thread nel singolo apartment multithreading.
- COINIT_APARTMENTTHREADED: inserisce il thread in un nuovo sta sta.
Negli argomenti seguenti di questa sezione vengono fornite altre informazioni sull'uso di modelli di threading e appartamenti in COM+:
Argomenti correlati