Enumerazione COINIT (objbase.h)
Determina il modello di concorrenza usato per le chiamate in ingresso agli oggetti creati da questo thread. Questo modello di concorrenza può essere a thread di appartamento o multithreading.
Sintassi
typedef enum tagCOINIT {
COINIT_APARTMENTTHREADED = 0x2,
COINIT_MULTITHREADED = 0x0,
COINIT_DISABLE_OLE1DDE = 0x4,
COINIT_SPEED_OVER_MEMORY = 0x8
} COINIT;
Costanti
COINIT_APARTMENTTHREADED Valore: 0x2 Inizializza il thread per la concorrenza dell'oggetto a thread di appartamento (vedere Osservazioni). |
COINIT_MULTITHREADED Valore: 0x0 Inizializza il thread per la concorrenza di oggetti multithreading (vedere Osservazioni). |
COINIT_DISABLE_OLE1DDE Valore: 0x4 Disabilita DDE per il supporto OLE1. |
COINIT_SPEED_OVER_MEMORY Valore: 0x8 Aumentare l'utilizzo della memoria in un tentativo di aumentare le prestazioni. |
Commenti
Quando un thread viene inizializzato tramite una chiamata a CoInitializeEx, si sceglie se inizializzarlo come thread di appartamento o multithreading progettando uno dei membri di COINIT come secondo parametro. In questo modo viene designato il modo in cui vengono gestite le chiamate in ingresso a qualsiasi oggetto creato da tale thread, ovvero la concorrenza dell'oggetto.
Il threading in appartamento, consentendo l'esecuzione di più thread, serializza tutte le chiamate in ingresso richiedendo che le chiamate ai metodi di oggetti creati da questo thread vengano sempre eseguite sullo stesso thread, ovvero l'appartamento/thread che li ha creati. Inoltre, le chiamate possono arrivare solo ai limiti della coda dei messaggi. A causa di questa serializzazione, non è in genere necessario scrivere il controllo di concorrenza nel codice per l'oggetto, diverso da evitare chiamate a PeekMessage e SendMessage durante l'elaborazione che non devono essere interrotte da altre chiamate o chiamate ad altri oggetti nello stesso appartamento/thread.
Il threading multi-threading (denominato anche threading libero) consente di chiamare i metodi di oggetti creati da questo thread per l'esecuzione in qualsiasi thread. Non esiste alcuna serializzazione di chiamate, ad esempio molte chiamate possono verificarsi allo stesso metodo o allo stesso oggetto o contemporaneamente. La concorrenza di oggetti a più thread offre le prestazioni più elevate e sfrutta al meglio l'hardware multiprocessore per la chiamata tra thread, cross-process e cross-machine, poiché le chiamate agli oggetti non vengono serializzate in alcun modo. Ciò significa, tuttavia, che il codice per gli oggetti deve applicare il proprio modello di concorrenza, in genere tramite l'uso delle primitive di sincronizzazione, ad esempio sezioni critiche, semafori o mutex. Inoltre, poiché l'oggetto non controlla la durata dei thread che lo accedono, non è possibile archiviare uno stato specifico del thread nell'oggetto (in Archiviazione locale thread).
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Intestazione | objbase.h |
Vedi anche
IInitializeSpy::P ostInitialize