Freigeben über


COINIT-Enumeration (objbase.h)

Bestimmt das Parallelitätsmodell, das für eingehende Aufrufe von Objekten verwendet wird, die von diesem Thread erstellt wurden. Dieses Parallelitätsmodell kann entweder apartmentthreaded oder multithreaded sein.

Syntax

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

Konstanten

 
COINIT_APARTMENTTHREADED
Wert: 0x2
Initialisiert den Thread für die Parallelität von Apartmentthreadobjekten (siehe Hinweise).
COINIT_MULTITHREADED
Wert: 0x0
Initialisiert den Thread für die Parallelität von Multithreadobjekten (siehe Hinweise).
COINIT_DISABLE_OLE1DDE
Wert: 0x4
Deaktiviert DDE für die OLE1-Unterstützung.
COINIT_SPEED_OVER_MEMORY
Wert: 0x8
Erhöhen Sie die Speicherauslastung, um die Leistung zu erhöhen.

Hinweise

Wenn ein Thread durch einen Aufruf von CoInitializeEx initialisiert wird, wählen Sie aus, ob er als Apartmentthread oder Multithread initialisiert werden soll, indem Sie eines der Member von COINIT als zweiten Parameter angeben. Dadurch wird festgelegt, wie eingehende Aufrufe von Objekten, die von diesem Thread erstellt wurden, behandelt werden, d. h. die Parallelität des Objekts.

Das Apartmentthreading ermöglicht zwar mehrere Ausführungsthreads, serialisiert aber alle eingehenden Aufrufe, indem erforderlich wird, dass Aufrufe von Methoden von Objekten, die von diesem Thread erstellt wurden, immer im selben Thread ausgeführt werden, d. h. im Apartment/Thread, von dem sie erstellt wurden. Darüber hinaus können Anrufe nur an Nachrichtenwarteschlangengrenzen eingehen. Aufgrund dieser Serialisierung ist es in der Regel nicht notwendig, die Parallelitätssteuerung in den Code für das Objekt zu schreiben, außer Aufrufe von PeekMessage und SendMessage während der Verarbeitung zu vermeiden, die nicht durch andere Methodenaufrufe oder Aufrufe anderer Objekte im gleichen Apartment/Thread unterbrochen werden dürfen.

Multithreading (auch als Freethreading bezeichnet) ermöglicht aufrufen von Methoden von Objekten, die von diesem Thread erstellt wurden, für einen beliebigen Thread auszuführen. Es gibt keine Serialisierung von Aufrufen, d. h. viele Aufrufe können für dieselbe Methode oder für dasselbe Objekt oder gleichzeitig erfolgen. Die Parallelität von Multithreadobjekten bietet die höchste Leistung und nutzt den besten Vorteil der Multiprozessorhardware für threadübergreifende, prozessübergreifende und computerübergreifende Aufrufe, da Aufrufe von Objekten in keiner Weise serialisiert werden. Dies bedeutet jedoch, dass der Code für Objekte ein eigenes Parallelitätsmodell erzwingen muss, in der Regel durch die Verwendung von Synchronisierungsgrundtypen wie kritische Abschnitte, Semaphoren oder Mutexen. Da das Objekt die Lebensdauer der Threads, die darauf zugreifen, nicht steuert, kann außerdem kein threadspezifischer Zustand im Objekt (in Thread Local Storage) gespeichert werden.

Hinweis Das Multithread-Apartment ist für die Verwendung durch Nicht-GUI-Threads vorgesehen. Threads in Multithread-Apartments sollten keine Ui-Aktionen ausführen. Dies liegt daran, dass UI-Threads eine Nachrichtenpumpe erfordern und COM keine Nachrichten für Threads in einem Multithread-Apartment pumpt.
 

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Kopfzeile objbase.h

Weitere Informationen

CoInitializeEx

IInitializeSpy::P ostInitialize

IInitializeSpy::P ReInitialize

Prozesse, Threads und Apartments