Freigeben über


Anrufsynchronisierung

COM-Anwendungen müssen während der Verarbeitung eines oder mehrerer Aufrufe von COM oder betriebssystem ordnungsgemäß mit der Benutzereingabe umgehen können. COM stellt nur die Anrufsynchronisierung für Singlethread-Wohnungen bereit. Multithread-Wohnungen (mit Freithreadthreadthreads) empfangen keine Anrufe beim Tätigen von Anrufen (im selben Thread). Multithread-Wohnungen können keine synchronisierten Anrufe tätigen. Asynchrone Aufrufe werden in synchrone Aufrufe in Multithread-Apartments konvertiert. Der Nachrichtenfilter wird nicht für einen Thread in einer Multithread-Wohnung aufgerufen. Weitere Informationen zu Threadingproblemen finden Sie unter Prozesse, Threads und Apartments.

COM-Aufrufe zwischen Prozessen sind wie folgt in drei Kategorien unterteilt:

synchrone Aufrufe

Der Großteil der Kommunikation, die innerhalb von COM stattfindet, ist synchron. Bei synchronen Anrufen wartet der Anrufer auf die Antwort, bevor er fortsetzt und eingehende Nachrichten empfangen kann, während er wartet. COM wechselt in eine modale Schleife, um auf die Antwort zu warten, andere Nachrichten empfangen und auf kontrollierte Weise zu verteilen.

asynchrone Benachrichtigungen

Beim Senden asynchroner Benachrichtigungen wartet der Aufrufer nicht auf die Antwort. COM verwendet PostMessage- oder allgemeine Ereignisse, um asynchrone Benachrichtigungen abhängig von der Plattform zu senden. COM definiert fünf asynchrone Methoden von IAdviseSink-:

Anmerkung

Während COM einen asynchronen Aufruf verarbeitet, können synchrone Aufrufe nicht ausgeführt werden. Die Implementierung von OnDataChange- einer Containeranwendung kann z. B. keinen Aufruf von IPersistStorage::Saveenthalten. Diese Aufrufe sind die einzigen asynchronen Aufrufe, die von COM unterstützt werden. Es gibt keine Möglichkeit, eine benutzerdefinierte Schnittstelle zu erstellen, die derzeit asynchron ist.

 

eingabesynchrone Anrufe

Beim Ausführen von Eingabesynchronisierungsaufrufen muss das aufgerufene Objekt den Aufruf abschließen, bevor die Steuerung zurückgegeben wird. Dadurch wird sichergestellt, dass die Fokusverwaltung ordnungsgemäß funktioniert und die vom Benutzer eingegebenen Daten entsprechend verarbeitet werden. Diese Aufrufe werden von COM über die SendMessage--Funktion ausgeführt, ohne eine modale Schleife einzugeben. Bei der Verarbeitung eines eingabesynchronen Aufrufs darf das aufgerufene Objekt keine Funktion oder Methode (einschließlich synchroner Methoden) aufrufen, die zur Steuerung führen können. Die folgenden Methoden sind eingabesynchron

Um Probleme zu minimieren, die sich aus der asynchronen Nachrichtenverarbeitung ergeben können, sind die meisten COM-Methodenaufrufe synchron. Bei synchroner Kommunikation ist kein spezieller Code erforderlich, um eingehende Nachrichten zu verteilen und zu verarbeiten. Wenn eine Anwendung einen synchronen Methodenaufruf vorgibt, wechselt COM in eine modale Warteschleife, die die erforderlichen Antworten verarbeitet und eingehende Nachrichten an Anwendungen sendet, die sie verarbeiten können.

COM verwaltet Methodenaufrufe durch Zuweisen eines Bezeichners, der als logische Thread-IDbezeichnet wird. Ein neues wird zugewiesen, wenn ein Benutzer einen Menübefehl auswählt oder wenn die Anwendung einen neuen COM-Vorgang initiiert. Nachfolgende Aufrufe, die sich auf den anfänglichen COM-Aufruf beziehen, werden derselben logischen Thread-ID wie der anfängliche Aufruf zugewiesen.