Обработка завершения
Обработчик завершения гарантирует, что определенный блок кода выполняется всякий раз, когда поток управления покидает определенный защищенный текст кода. Обработчик завершения состоит из следующих элементов.
- Защищенный текст кода
- Блок кода завершения, выполняемый при выходе потока управления из защищенного тела
Обработчики завершения объявляются в синтаксисе для конкретного языка. С помощью компилятора оптимизации Microsoft C/C++ они реализуются с помощью __try и __finally. Дополнительные сведения см. в синтаксисе обработчика .
Защищенный текст кода может быть блоком кода, набором вложенных блоков или всей процедурой или функцией. Каждый раз, когда выполняется защищенный текст, будет выполнен блок кода завершения. Единственное исключение — это завершение потока во время выполнения защищаемого блока (например, если функции ExitThread или ExitProcess вызываются из защищаемого блока).
Блок завершения выполняется, когда поток управления покидает защищенный блок, независимо от того, завершается ли защищенный блок нормально или аномально. Защищенный блок считается завершенным, когда последняя инструкция в блоке выполняется, а управление переходит последовательно в блок завершения. Ненормальное завершение происходит, когда поток управления покидает защищенную область из-за исключения или из-за оператора управления, например, возврат, goto, breakили continue. Функция AbnormalTermination вызывается из блока завершения, чтобы определить, завершился ли защищенный блок нормально.