Share via


Considerazioni sul threading

Il registratore di componenti in coda COM+ è in grado di essere eseguito nell'apartment multithreading (MTA) del processo o in un apartment a thread singolo (STA). Quando il registratore viene eseguito in STA, COM+ richiede che ogni appartamento contenente oggetti disponga di una coda di accodamento messaggi per gestire le chiamate da altri processi e appartamenti all'interno dello stesso processo. Ciò significa che la funzione di lavoro del thread deve avere un ciclo di messaggi. Quando viene creata un'istanza di un componente in coda, il puntatore dell'interfaccia restituito è sempre un puntatore dell'interfaccia proxy anziché un puntatore diretto dell'interfaccia. Il puntatore è in realtà un riferimento a un'istanza del registratore. Se questo riferimento all'interfaccia di registrazione viene passato a un altro thread, il thread originale deve comunque eseguire il ciclo di messaggi di Windows in modo che il thread ricevente possa annullare ilmarsaling dell'interfaccia. In caso contrario, il thread ricevente si blocca in una chiamata a CoUnmarshalInterface.

Se si usano primitive per sincronizzare i thread, è consigliabile usare MsgWaitForMultipleObjects anziché altre funzioni di sincronizzazione. In questo modo vengono controllati i messaggi nella coda e lo stato dell'oggetto di sincronizzazione.