Zeitliche Steuerung der Ausnahmebehandlung: Eine Zusammenfassung
Ein Beendigungshandler wird ausgeführt, unabhängig davon, wie der __try-Anweisungsblock beendet wird.Ursachen gehören __try Herausspringen des Blocks eine longjmp-Anweisung, die Überträgt die Steuerung aus dem Block und dem Entladen des Stapels aufgrund der Ausnahmebehandlung.
Hinweis |
---|
Visual C++ unterstützt zwei Arten von setjmp und longjmp-Anweisungen.Die schnelle Version umgeht, Kündigungs Klassenbehandlung ist jedoch effizienter.Um diese Version zu verwenden, schließen Sie die Datei. SETJMP.H ein.Die andere Version unterstützt Kündigungs Klassenbehandlung, wie im vorherigen Abschnitt beschrieben.Um diese Version zu verwenden, schließen Sie die Datei. SETJMPEX.H ein.Die Erhöhung der Leistung der schnellen Version ist von der Hardwarekonfiguration ab. |
Das Betriebssystem übergibt alle in der richtigen Reihenfolge Beendigungshandler, bevor ein beliebiger anderer Code ausgeführt werden kann, einschließlich der Text eines Ausnahmehandlers aus.
Wenn die Ursache für die Unterbrechung eine Ausnahme ist, muss das System den Filter Teil einer oder mehrerer Ausnahmehandler zum ersten Mal ausführen, bevor er entscheidet sich was zu beenden.Die Reihenfolge von Ereignissen lautet:
Eine Ausnahme wird ausgelöst.
Das System untersucht die Hierarchie der aktiven Ereignishandlern und übergibt den Filter des Handlers mit höchsten Rangfolge aus. Hierbei handelt es sich um den installierten und im Hinblick darauf Blöcke und Funktionsaufrufe am tiefsten geschachtelte Ausnahmehandler zuletzt.
Wenn dieser Filter Steuerelement (gibt 0 zurück), übergibt, wird der Prozess fortgesetzt, bis ein Filter gefunden wird, der nicht Steuerelement übergibt.
Wenn dieser Filter gibt 1, ausgeführt wird fortgesetzt, wo die Ausnahme ausgelöst wurde, und keine Beendigung findet statt.
Wenn der Filter 1 zurückgibt, finden die folgenden Ereignisse aufgeführt:
Das System entlädt den Stapel und löscht alle Stapelrahmen zwischen dem gerade ausgeführten Code (wobei die Ausnahme ausgelöst wurde) und der Stapelrahmen, der den Ausnahmehandler enthält, der Steuerelement wechselt.
Während der Stapel selbst entlädt, wird jeder Beendigungshandler auf dem Stapel ausgeführt.
Der Ausnahmehandler selbst wird ausgeführt.
Steuern der Codezeile wird nach dem Ende des Ausnahmehandlers.