共用方式為


COM+ 線程模型

COM+ 線程模型是圍繞稱為 Apartment 的物件集合所設計。 Apartment 是程式中所包含的內容集合,如下圖所示。

圖表,顯示在某流程中,在某間公寓內的活動上下文集合。

Apartment 內的通話是直接的,而跨 Apartment 的通話則是間接的,且需要代理和存根代碼。 Apartment 允許具有不同同步處理和重新進入屬性的物件,而且有兩個類別:單個線程和多線程。 單一執行緒套間 (STA) 中的物件會在它們被建立的特定執行緒上執行。 STA 一次只允許執行一個方法。 它們專為使用者介面所設計,並依賴Microsoft Windows 消息佇列來處理來電。

多執行緒環境 (MTA) 中的物件可以在任何執行緒上運行,並且可以同時運行多個方法。 MTA 支援隱式的可重入性。

COM+ 類別會標示為 ThreadingModel 屬性,讓 COM+ 能夠在適當的 Apartment 中建立物件。 若要判斷物件建立所在的 Apartment,CoCreateInstance 會使用 ThreadingModel 属性。

線程必須先呼叫 CoInitializeEx,才能使用 COM+。 這會在正確的公寓和上下文中建立它們。 主線程 Apartment 判斷為 CoInitializeEx所呼叫的第一個 STA。 這通常與進程的主要線程相關聯。 CoInitializeEx 藉由設定下列旗標來指出線程所需的 Apartment 類型:

  • COINIT_MULTITHREADED- 找出單個多線程 Apartment 中的線程。
  • COINIT_APARTMENTTHREADED— 將執行緒置入新的 STA。

本節中的下列主題提供了在 COM+ 中使用執行緒模型和單元的詳細資訊。

進程、線程和單元

執行緒模型