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.
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
IInitializeSpy::P ostInitialize