Condividi tramite


Intervallo di gestione delle eccezioni: Un riepilogo

Un gestore di terminazione viene eseguito indipendentemente da l __try il blocco di istruzioni viene terminato.Le cause includono il salto dal __try blocco, a longjmp istruzione che trasferisce il controllo al blocco e di rimozione dello stack a causa di gestione delle eccezioni.

[!NOTA]

Visual C++ supporta due forme di setjmp e longjmp istruzioni.La gestione veloce di chiusura del programma della versione ma è più efficiente.Per utilizzare questa versione, includere il file SETJMP.H.L'altra versione supporta la gestione della terminazione come descritto nel paragrafo precedente.Per utilizzare questa versione, includere il file SETJMPEX.H.Aumento delle prestazioni della versione veloce dipende dalla configurazione hardware.

Il sistema operativo esegue tutti i gestori di terminazione ordine corretto prima di qualsiasi altro codice possa essere eseguita, incluso il corpo di un gestore di eccezioni.

Quando la ragione per cui è un'eccezione, il sistema deve innanzitutto eseguire la parte del filtro di uno o più gestori di eccezioni prima di decidere di ciò che l'interruzione.L'ordine degli eventi è:

  1. Viene generata un'eccezione.

  2. Gli aspetti del sistema nella gerarchia dei gestori di eccezioni attivi e viene eseguito il filtro del gestore con precedenza più elevata, si tratta del gestore di eccezioni recente installata e il più approfondita annidato, in termini di blocchi e chiamate di funzione.

  3. Se questo filtro passa il controllo (restituisce 0), il processo continua fino a trovare un filtro che non passa il controllo.

  4. Se completamento del filtro e 1, l'esecuzione continua in cui l'eccezione è stata generata e non chiusura ha luogo.

  5. Se il filtro restituisce 1, i seguenti eventi:

    • Il sistema rimuove lo stack, deselezionando di tutti gli stack frame tra il codice in esecuzione (dove l'eccezione è stata generata) e lo stack frame contenente il gestore di eccezioni che riceve il controllo.

    • Man mano che lo stack viene rimosso, ogni gestore di terminazione nello stack viene eseguito.

    • Il gestore di eccezioni stesso viene eseguito.

    • Il controllo passa alla riga di codice alla fine di questo gestore eccezioni.

Vedere anche

Riferimenti

Scrittura di un gestore di terminazione

Gestione delle eccezioni strutturata (C++)