Czas obsługi wyjątków: Podsumowanie
Procedury obsługi sytuacji krańcowych jest wykonany niezależnie od sposobu __try instrukcji bloku zostaje zakończone.Przyczyny obejmują skoki z __try blok, longjmp instrukcji, która przekazuje sterowanie z bloku i niekontrolowanej stosu, ze względu na obsługę wyjątków.
[!UWAGA]
Visual C++ obsługuje dwa rodzaje setjmp i longjmp instrukcji.Wersja szybka pomija termination handling, ale jest bardziej efektywne.Aby użyć tej wersji, należy dołączyć plik SETJMP.H.Inne wersja obsługuje termination handling, jak opisano w poprzednim ustępie.Aby użyć tej wersji, należy dołączyć plik SETJMPEX.H.Wzrost wydajności fast wersji zależy od konfiguracji sprzętu.
System operacyjny wykonuje wszystkie procedury obsługi sytuacji krańcowych w prawidłowej kolejności przed innymi kodu mogą być wykonywane, wraz z treścią procedury obsługi wyjątków.
Gdy przyczyną przerwania jest to wyjątek, system musi najpierw wykonać część filtru procedur obsługi wyjątków przed podjęciem decyzji co do wypowiedzenia.Kolejność zdarzeń jest:
Wyjątek.
System przegląda hierarchię procedur obsługi wyjątków aktywne i wykonuje filtru program obsługi o najwyższym priorytecie; to jest obsługa wyjątków niedawno zainstalowany i najbardziej głęboko zagnieżdżonych względem bloków i wywołania funkcji.
Jeśli ten filtr przekazuje kontrolę (zwraca wartość 0), proces jest kontynuowany do momentu znalezienia filtru, który nie przebiegu kontroli.
Jeśli ten filtr zwraca –1, wykonanie nadal, gdzie wystąpił wyjątek i odbywa się nie zakończenia.
Jeśli filtr zwraca 1, zachodzą następujące zdarzenia:
System odkręcania stosu, wyczyszczenie wszystkich ramek stosu między aktualnie wykonywany kod (gdzie wyjątek został wzbudzony) i ramki stosu, która zawiera procedury obsługi wyjątków, uzyskując kontrolę.
W postaci zwiniętej stosu jest wykonywana każdej procedury obsługi sytuacji krańcowych na stosie.
Obsługa wyjątków, sam jest wykonywany.
Sterowanie przechodzi do wiersza kodu, po zakończeniu tej procedury obsługi wyjątków.