共用方式為


COINIT 列舉 (objbase.h)

決定用於此線程所建立物件的連入呼叫的並行模型。 此併行模型可以是 Apartment 線程或多線程。

Syntax

typedef enum tagCOINIT {
  COINIT_APARTMENTTHREADED = 0x2,
  COINIT_MULTITHREADED = 0x0,
  COINIT_DISABLE_OLE1DDE = 0x4,
  COINIT_SPEED_OVER_MEMORY = 0x8
} COINIT;

常數

 
COINIT_APARTMENTTHREADED
值: 0x2
Initializes the thread for apartment-threaded object concurrency (see Remarks).
COINIT_MULTITHREADED
值: 0x0
Initializes the thread for multithreaded object concurrency (see Remarks).
COINIT_DISABLE_OLE1DDE
值: 0x4
停用 OLE1 支援的 DDE。
COINIT_SPEED_OVER_MEMORY
值: 0x8
嘗試增加效能時增加記憶體使用量。

備註

透過呼叫 CoInitializeEx 初始化線程時,您可以選擇是否要將它初始化為 Apartment 線程或多線程,方法是將 COINIT 的其中一個成員指定為其第二個參數。 這會指定如何處理該線程所建立之任何對象的連入呼叫,也就是物件的並行存取。

Apartment 線程雖然允許多個線程執行,但要求呼叫這個線程所建立的物件方法一律在相同的線程上執行,也就是建立這些線程的 Apartment/線程,以串行化所有傳入呼叫。 此外,呼叫只能抵達消息佇列界限。 由於此串行化,因此通常不需要將並行控制寫入物件的程序代碼,而不需要避免在處理期間呼叫 PeekMessageSendMessage ,而其他方法調用或呼叫相同 Apartment/線程中的其他物件時不得中斷。

多線程 (也稱為自由線程處理) 允許呼叫這個線程所建立物件的方法,在任何線程上執行。 呼叫沒有串行化,亦即許多呼叫可能會發生在相同方法或相同對象或同時發生。 多線程物件並行提供最高的效能,並充分利用跨線程、跨進程和跨計算機呼叫的多處理器硬體,因為對對對象的呼叫不會以任何方式串行化。 不過,這表示對象的程式代碼必須強制執行自己的並行模型,通常是透過使用同步處理基本類型,例如重要區段、號誌或 Mutex。 此外,因為物件不會控制正在存取它的線程存留期,所以線程特定狀態可能不會儲存在物件中 (線程 本機記憶體) 。

注意 多線程 Apartment 適用於非 GUI 線程。 多線程 Apartment 中的線程不應該執行 UI 動作。 這是因為UI線程需要訊息幫浦,而 COM 不會為多線程Apartment中的線程提取訊息。
 

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
標頭 objbase.h

另請參閱

CoInitializeEx

IInitializeSpy::P ostInitialize

IInitializeSpy::P reInitialize

進程、線程和 Apartment