Compartilhar via


Tratamento de terminação

Um manipulador de terminação garante que um bloco específico de código seja executado sempre que o fluxo de controle deixar um determinado corpo protegido de código. Um manipulador de terminação consiste nos seguintes elementos.

  • Um corpo de código protegido
  • Um bloco de código de terminação a ser executado quando o fluxo de controle deixa o corpo protegido

Os manipuladores de terminação são declarados na sintaxe específica do idioma. Usando o Microsoft C/C++ Optimizing Compiler, eles são implementados usando __try e __finally. Para obter mais informações, consulte Sintaxe do manipulador.

O corpo protegido do código pode ser um bloco de código, um conjunto de blocos aninhados ou um procedimento ou função inteira. Sempre que o corpo protegido for executado, o bloco de código de terminação será executado. A única exceção a isso é quando o thread termina durante a execução do corpo protegido (por exemplo, se a função ExitThread ou ExitProcess for chamada de dentro do corpo protegido).

O bloco de terminação é executado quando o fluxo de controle deixa o corpo protegido, independentemente de o corpo guardado terminar normalmente ou de forma anormal. Considera-se que o corpo protegido terminou normalmente quando a última instrução no bloco é executada e o controle prossegue sequencialmente para o bloco de terminação. A terminação anormal ocorre quando o fluxo de controle deixa o corpo protegido devido a uma exceção ou devido a uma instrução de controle, como retorno, goto, quebra ou continuação. A função AbnormalTermination pode ser chamada de dentro do bloco de terminação para determinar se o corpo protegido terminou normalmente.