Поделиться через


Обработка завершения

Обработчик завершения гарантирует, что определенный блок кода выполняется всякий раз, когда поток управления покидает определенный защищенный текст кода. Обработчик завершения состоит из следующих элементов.

  • Защищенный текст кода
  • Блок кода завершения, выполняемый при выходе потока управления из защищенного тела

Обработчики завершения объявляются в синтаксисе для конкретного языка. С помощью компилятора оптимизации Microsoft C/C++ они реализуются с помощью __try и __finally. Дополнительные сведения см. в разделе "Синтаксис обработчика".

Защищенный текст кода может быть блоком кода, набором вложенных блоков или всей процедурой или функцией. Каждый раз, когда выполняется защищенный текст, будет выполнен блок кода завершения. Единственное исключение заключается в том, что поток завершается во время выполнения защищенного тела (например, если функция ExitThread или ExitProcess вызывается из защищенного тела).

Блок завершения выполняется, когда поток управления покидает защищенный организм независимо от того, завершается ли защищенный орган нормально или аномально. Защищенный текст обычно завершается, когда последняя инструкция в блоке выполняется, а контроль выполняется последовательно в блок завершения. Ненормальное завершение происходит, когда поток управления покидает защищенный текст из-за исключения или из-за инструкции элемента управления, например возврата, goto, разрыва или продолжения. Функцию аномального управления можно вызвать из блока завершения, чтобы определить, завершается ли защищенный текст нормально.