2013-11-09 11 views
6

in un thread, c'è una differenza se usoCoInitialize (zero) e CoInitializeEx (0, COINIT_MULTITHREADED) differenza

Coinitialize(nil) 

anziché

CoInitializeEx(0, COINIT_MULTITHREADED); 

uso Delphi 7 ma presumo la domanda può rimanere per altri linguaggi di programmazione Grazie per il vostro aiuto.

+4

Hai letto la documentazione sul 'CoInitialize'? –

+0

sì, ma non è chiaro – user382591

+2

Forse potresti approfondire su quale parte della documentazione stai combattendo. –

risposta

11

Il precedente inizializza COM in un modo che inserisce il thread chiamante nel proprio apartment a thread singolo (STA). Quest'ultimo inizializza COM in un modo che inserisce il thread chiamante in un apartment multi-threaded condiviso (MTA). I due appartamenti hanno una semantica molto diversa, specialmente nel modo in cui gli oggetti COM sono accessibili attraverso i limiti dei thread. I thread in diversi appartamenti devono utilizzare i proxy per condividere gli oggetti COM, ma COM fornisce la sincronizzazione per te (tramite le code dei messaggi per thread). I thread nello stesso apartment possono condividere oggetti COM senza utilizzare i proxy, ma devono essere sincronizzati manualmente, ad esempio con sezioni o mutex critici.

Quindi sì, c'è una differenza e può essere molto significativa. Si prega di leggere la documentazione su MSDN, è molto dettagliata.

CoInitialize function

CoInitializeEx function

Processes, Threads, and Apartments