Verwenden von Threads, asynchronen Prozeduren und Fenstermeldungen
Aktivierungskontexte sind während des gesamten Prozesses sichtbar. Die Aktivierungskontextstapel sind jedoch threadübergreifend, und zwei Threads im selben Prozess können unterschiedliche Aktivierungsstapel aufweisen. CreateThread legt den aktuellen Aktivierungskontext automatisch oben im Aktivierungsstapel des neuen Threads ab. Dies kann das Upgrade von vorhandenem Code zur Verwendung paralleler Komponenten vereinfachen, da der neue Thread sofort im aktuellen Aktivierungskontext ausgeführt werden kann.
Asynchrone Prozeduraufrufe, Abschlussportrückrufe und alle anderen Rückrufe in anderen Threads erhalten automatisch den Aktivierungskontext der Quelle. Wenn der Rückruf aufgerufen wird, wird der Aktivierungsstapel bereinigt. Dies bedeutet, dass Ihre Anwendung asynchrone Prozeduraufrufe und Rückrufe verwenden kann, ohne explizit Kontexte zu aktivieren, da die Kontextverwaltung von der zugrunde liegenden nebeneinander liegenden Infrastruktur durchgeführt wird. Um andere Kontexte während eines Rückrufs oder neuen Threads aktiv zu machen, kann Ihre Anwendung eine eigene Kontextverwaltung durchführen. In diesem Fall muss Ihr Programm die richtige Sequenz von Aktivierungskontextfunktionen zum Aktivieren und Deaktivieren von Funktionen verwenden.
Aktivierungskontexte sind threadneutral. Durch das Aktivieren eines Kontexts wird nur der Stapel des aktuellen Threads geändert, und Sie können keinen Kontext threadübergreifend aktivieren. Thread A kann keinen Kontext auf Thread B erzwingen. Die Funktionen der Aktivierungskontext-API sind ebenfalls threadfähige Funktionen.
Wenn Sie SendMessage oder PostMessage verwenden, um eine Fenstermeldung an eine andere Fensterprozedur in Ihrem Prozess zu senden, wird der aktuelle Aktivierungskontext aktiviert, bevor die Nachricht an die Zielprozedur übergeben wird. Der aktuelle Aktivierungskontext wird zusammen mit der Nachricht angezeigt. Dadurch wird sichergestellt, dass Nachrichten, die auf COM-Objekte, DLL-Namen oder andere ressourcenseitige Ressourcen verweisen, die richtigen Kontextinformationen beibehalten.