Partilhar via


Tratamento de Rescisões

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 de código protegido. 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 em 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 Handler Syntax.

O corpo de código protegido pode ser um bloco de código, um conjunto de blocos aninhados ou um procedimento ou função inteiro. Sempre que o corpo vigiado for executado, o bloco de código de rescisã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 vigiado, independentemente de o corpo vigiado terminar normalmente ou anormalmente. Considera-se que o corpo vigiado terminou normalmente quando a última instrução no bloco é executada e o controlo passa de forma sequencial para o bloco de terminação. A terminação anormal ocorre quando o fluxo de controlo deixa o corpo protegido devido a uma exceção, ou devido a uma declaração de controlo, como o uso de return, goto, break, ou continue. A função AbnormalTermination pode ser chamada de dentro do bloco de terminação para determinar se o corpo protegido terminou normalmente.