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).

Nota L'appartamento multi threading è destinato all'uso da thread non GUI. I thread in appartamenti multi thread non devono eseguire azioni dell'interfaccia utente. Questo perché i thread dell'interfaccia utente richiedono una pompa di messaggi e COM non pompa i messaggi per i thread in un appartamento multi 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

CoInitializeEx

IInitializeSpy::P ostInitialize

IInitializeSpy::P reInitialize

Processi, thread e appartamenti