Gestione della terminazione

Un gestore di terminazione garantisce che un blocco specifico di codice venga eseguito ogni volta che il flusso di controllo lascia un particolare corpo sorvegliato del codice. Un gestore di terminazione è costituito dagli elementi seguenti.

  • Corpo sorvegliato di codice
  • Blocco di codice di terminazione da eseguire quando il flusso di controllo lascia il corpo sorvegliato

I gestori di terminazione vengono dichiarati nella sintassi specifica del linguaggio. Usando microsoft C/C++ Ottimizzazione del compilatore, vengono implementati usando __try e __finally. Per altre informazioni, vedere Sintassi del gestore.

Il corpo sorvegliato del codice può essere un blocco di codice, un set di blocchi annidati o un'intera routine o funzione. Ogni volta che viene eseguito il corpo sorvegliato, verrà eseguito il blocco di codice di terminazione. L'unica eccezione è quando il thread termina durante l'esecuzione del corpo sorvegliato( ad esempio, se la funzione ExitThread o ExitProcess viene chiamata dall'interno del corpo sorvegliato).

Il blocco di terminazione viene eseguito quando il flusso di controllo lascia il corpo sorvegliato, indipendentemente dal fatto che il corpo sorvegliato terminasse normalmente o in modo anomalo. Il corpo sorvegliato viene considerato terminato normalmente quando viene eseguita l'ultima istruzione nel blocco e il controllo procede in sequenza nel blocco di terminazione. La terminazione anomala si verifica quando il flusso del controllo lascia il corpo sorvegliato a causa di un'eccezione o a causa di un'istruzione di controllo, ad esempio return, goto, break o continue. La funzione AbnormalTermination può essere chiamata dall'interno del blocco di terminazione per determinare se il corpo sorvegliato termina normalmente.