COM+-Threadingmodelle

COM+-Threadingmodelle sind für eine Objektsammlung konzipiert, die als Apartment bezeichnet wird. Ein Apartment ist eine Sammlung von Kontexten, die in einem Prozess enthalten sind, wie in der folgenden Abbildung dargestellt.

Diagramm, das eine Auflistung von Kontexten in einer Aktivität innerhalb eines Apartments innerhalb eines Prozesses zeigt.

Aufrufe innerhalb eines Apartments sind direkt, während Aufrufe zwischen Apartments (out-of-process) indirekt sind und Proxy- und Stubcode erfordern. Apartments ermöglichen Objekte mit unterschiedlichen Synchronisierungs- und Wiederinvarianzeigenschaften und weisen zwei Kategorien auf: Singlethread und Multithread. Objekte in einem Singlethread-Apartment (STA) werden für den bestimmten Thread ausgeführt, in dem sie erstellt wurden. STAs ermöglichen jeweils nur die Gleichzeitige Ausführung einer Methode. Sie sind für Benutzeroberflächen konzipiert und basieren auf der Microsoft Windows Nachrichtenwarteschlange, um eingehende Anrufe zu verarbeiten.

Objekte in einem Multithread-Apartment (MTA) werden in einem beliebigen Thread ausgeführt und ermöglichen die gleichzeitige Ausführung einer beliebigen Anzahl von Methoden. MTAs unterstützen die Reentrance implizit.

COM+-Klassen sind mit einer ThreadingModel-Eigenschaft markiert, die es COM+ ermöglicht, das Objekt im richtigen Apartment zu erstellen. Um zu bestimmen, in welchem Apartment ein Objekt erstellt wird, verwendet CoCreateInstance die ThreadingModel-Eigenschaft.

Threads müssen CoInitializeEx aufrufen, bevor sie COM+ verwenden können. Dadurch werden sie im richtigen Apartment und Kontext erstellt. Das Hauptthread-Apartment wird als erstes STA bestimmt, das von CoInitializeEx aufgerufen wird. Dies ist normalerweise dem Hauptthread eines Prozesses zugeordnet. CoInitializeEx gibt den Typ des Apartments an, der vom Thread benötigt wird, indem die folgenden Flags festgelegt werden:

  • COINIT _ MULTITHREADED– Sucht den Thread im einzelnen Multithread-Apartment.
  • COINIT _ APARTMENTTHREADED– Platziert den Thread in ein neues STA.

Die folgenden Themen in diesem Abschnitt enthalten weitere Informationen zur Verwendung von Threadingmodellen und Apartment in COM+:

Prozesse, Threads und Apartment

ThreadingModel