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/線程,以串行化所有傳入呼叫。 此外,呼叫只能抵達消息佇列界限。 由於此串行化,因此通常不需要將並行控制寫入物件的程序代碼,而不需要避免在處理期間呼叫 PeekMessage 和 SendMessage ,而其他方法調用或呼叫相同 Apartment/線程中的其他物件時不得中斷。
多線程 (也稱為自由線程處理) 允許呼叫這個線程所建立物件的方法,在任何線程上執行。 呼叫沒有串行化,亦即許多呼叫可能會發生在相同方法或相同對象或同時發生。 多線程物件並行提供最高的效能,並充分利用跨線程、跨進程和跨計算機呼叫的多處理器硬體,因為對對對象的呼叫不會以任何方式串行化。 不過,這表示對象的程式代碼必須強制執行自己的並行模型,通常是透過使用同步處理基本類型,例如重要區段、號誌或 Mutex。 此外,因為物件不會控制正在存取它的線程存留期,所以線程特定狀態可能不會儲存在物件中 (線程 本機記憶體) 。
注意 多線程 Apartment 適用於非 GUI 線程。 多線程 Apartment 中的線程不應該執行 UI 動作。 這是因為UI線程需要訊息幫浦,而 COM 不會為多線程Apartment中的線程提取訊息。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
標頭 | objbase.h |
另請參閱
IInitializeSpy::P ostInitialize