4.1 Обработчики завершения
Структурная обработка исключений (structured exception handling, SEH). Преимущество SEH в том, что при написании кода можно сосредоточиться на решении своей задачи. Если при выполнении программы возникнут неприятности, система сама обнаружит их и сообщит Вам.
Хотя полностью игнорировать ошибки в программе при использовании SEH нельзя, она все же позволяет отделить основную работу от рутинной обработки ошибок, к которой можно вернуться позже.
Главное, почему Microsoft ввела в Windows поддержку SEH, было ее стремление упростить разработку операционной системы и повысить ее надежность. А нам SЕН поможет сделать надежнее наши программы.
Основная нагрузка по поддержке SEH ложится на компилятор, а не на операционную систему. Он генерирует специальный код на входах и выходах блоков исключений (exception blorks), создает таблицы вспомогательных структур данных для поддержки SEH и предоставляет функции обратного вызова, к которым система могла бы обращаться для прохода по блокам исключений Компилятор отвечает и за формирование стековых фреймов (stack frames) и другой внутренней информации, используемой операционной системой. Добавить поддержку SEH в компилятор — задача не из легких, поэтому не удивляйтесь, когда увидите, что разные поставщики по-разному реализуют SEH в своих компиляторах. К счастью, на детали реализации можно не обращать внимания, а просто задействовать возможности компилятора в поддержке SEH.
Различия в реализации SEH разными компиляторами могли бы затруднить описание конкретных примеров использования SEH. Но большинство поставщиков компиляторов придерживается синтаксиса, рекомендованного Microsoft Синтаксис и ключевые слова в моих примерах могут отличаться от применяемых в других компиляторах, по основные концепции SEH везде одинаковы. В этой главе я использую синтаксис компиляюра Microsoft Visual C++.
Не путайте SEH с обработкой исключении в С++, которая представляет собой еще одну форму обработки исключений, построенную на применении ключевых слов языка С++ catch и throw При этом Microsoft Visual C++ использует преимущества поддержки SEH, уже обеспеченной компилятором и операционными системами Windows.
SEH предоставляет две основные возможности, обработку завершения (termination handling) и обработку исключений (exception handling). B этой главе мы рассмотрим обработку завершения.
Обработчик завершения гарантирует, что блок кода (собственно обработчик) будет выполнен независимо от того, как происходит выход из другого блока кода — защищенного участка программы. Синтаксис обработчика завершения при работе с компилятором Microsoft Visual C++ выглядит так:
__try { // защищенный блок }
_finally { // обработчик завершения }
Ключевые слова _try и __flnally обозначают два блока обработчика завершения, В предыдущем фрагменте кода совместные действия операционной системы и компилятора гарантируют, что код блока finаllу обработчика завершения будет выполнен независимо от того, как произойдет выход из защищенного блока. И неважно, разместите Вы в защищенном блоке операторы return, goto или даже longjump — обработчик завершения все равно будет вызван. Далее я покажу Вам несколько примеров использования обработчиков завершения.
- Оглавление
- Введение
- Цель работы
- 1 Процессы, задания и потоки.
- 1.1 Процессы.
- 1.2 Задания.
- 1.3 Потоки.
- 2. Управление памятью в операционных системах
- 2.1 Память и отображения, виртуальное адресное пространство
- 2.2 Виртуальное адресное пространство
- 2.3 Распределение памяти статическими и динамическими разделами
- 2.4 Разделы с фиксированными границами
- 2.5 Разделы с подвижными границами
- 2.6 Сегментная, страничная и сегментно-страничная организация памяти.
- 3 Динамически подключаемые библиотеки.
- 4 Обработка исключений
- 4.1 Обработчики завершения
- 4.2 Примеры использования обработчиков завершения
- 5 Операции с окнами
- 5.1 Оконные сообщения
- 5.2 Очередь сообщений потока
- 5.3 Посылка асинхронных сообщений в очередь потока
- 5.4 Посылка синхронных сообщений окну
- Приложение 1. Справочник api-функций и сообщений Windows.
- Приложение 2. Темы курсовой работы.
- Список литературы
- Литература