Sdílet prostřednictvím


Načasování zpracování výjimky: souhrn

Obslužná rutina ukončení se provede bez ohledu na to, jak je blok příkazu __try ukončen.Příčina zahrnuje opuštění bloku příkazu __try, příkaz longjmp, který provede opuštění bloku a odvíjení zásobníku z důvodu zpracování výjimek.

[!POZNÁMKA]

Jazyk Visual C++ podporuje dva tvary příkazů setjmp a longjmp.Rychlá verze obchází zpracování ukončení, ale je mnohem efektivnější.Chcete-li tuto verzi použít, zahrňte soubor SETJMP.H.Jiné verze podporují zpracování ukončení, jak je popsáno v předchozím odstavci.Chcete-li tuto verzi použít, zahrňte soubor SETJMPEX.H.Zvýšení výkonu u rychlé verze závisí na konfiguraci hardwaru.

Operační systém spustí všechny obslužné rutiny ukončení ve správném pořadí, před tím než lze spustit jakýkoli jiný kód, včetně těla obslužné rutiny výjimky.

Je-li příčinou přerušení výjimka, systém musí před rozhodnutím, co ukončit, nejprve spustit část filtru jedné nebo více obslužných rutin výjimek.Pořadí událostí je následující:

  1. Je vyvolána výjimka.

  2. Systém v hierarchii vyhledá aktivní obslužné rutiny výjimek a spustí filtr obslužné rutiny s nejvyšší prioritou. To je obslužná rutina výjimky, která byla nainstalována jako poslední a je nejhlouběji vnořená, co se týče bloků a volání funkcí.

  3. Pokud tento filtr předá řízení (vrátí hodnotu 0), proces pokračuje, dokud není nalezen filtr, který nepředá řízení.

  4. Pokud tento filtr vrátí hodnotu –1, provádění pokračuje na místě, kde byla výjimka vyvolána a nedojde k žádnému ukončení.

  5. Jestliže filtr vrátí hodnotu 1, dojde k následujícím událostem:

    • Systém provede odvinutí zásobníku, zruší všechny rámce zásobníku mezi aktuálně prováděným kódem (kdy byla výjimka vyvolána) a rámcem zásobníku obsahující obslužnou rutinu výjimky, která převezme řízení.

    • Když je zásobník odvinut, je provedena každá obslužná rutina ukončení v zásobníku.

    • Je provedena samotná obslužná rutina výjimky.

    • Řízení přejde na řádek kódu na konci této obslužné rutiny výjimky.

Viz také

Referenční dokumentace

Zápis obslužné rutiny ukončení

Strukturované zpracování výjimek (C/C++)