Операционные системы. Учебное пособие. Марапулец Ю.В. - 86 стр.

UptoLike

Составители: 

грамму обработки исключения от программного кода, который выполняется в нормаль-
ных ситуациях.
try // начало блока try
{
<операторы основной программы> // код, в котором могут
// генерироваться исключения
}
catch( <фильтр> ) // начало блока обработки исключений
{
<код подпрограммы обработки исключений> // код, который выполняется
// при наличии исключения
}
В любой своей реализации механизм структурированной обработки исключений
связывает блок защищаемого программного кода с подпрограммой обработки исключе-
ний. Если исключение происходит при выполнении защищаемого блока, управление пе-
редается фильтрующему выражению. Последнее обычно определяет тип исключения и
принимает решение о том, как продолжать его обработку. Исключения, прошедшие че-
рез фильтр, поступают в подпрограмму-обработчик. Если фильтр блокирует исключе-
ние, подпрограмма-обработчик не вызывается и система продолжает поиск процедуры,
которая возьмет на себя обработку этого исключения.
Фильтрующее выражение может быть достаточно сложным. При необходимости
оно может даже вызывать отдельную функцию. Иногда фильтр сам выполняет обработ-
ку исключения, вследствие чего блок catch остается пустым. Во многих случаях для об-
работки исключительных ситуаций применяются MFC-класс CException и производные
от него классы. Каждый из классов этой группы предназначен для обработки опреде-
ленных типов исключений (таблица 3.2).
Таблица 3.2
Класс Описание
CMemoryException Исключение, вызванное нехваткой памяти
CNotSupportedException Запрос недопустимой операции
CArchiveException Исключение при работе с архивами
CFileException Исключение при выполнении операций с файлами
CResourceException Ресурс не обнаружен или не может быть создан
COleException OLE-исключение
CDBException Исключение, возникающее при выполнении операций с база-
ми данных; генерируется ODBC-классами библиотеки MFC
COleDispatchException Ошибка диспетчеризации (OLE-автоматизации)
CUserException Исключение, связанное с невозможностью найти заданный
ресурс
CDaoException Исключение, возникающее при работе с объектами доступа к
данным (Data Access Object, DAO); генерируется DАО-
классами библиотеки MFC
CInternetException Исключение, связанное с работой в Internet; генерируется
Internet-классами библиотеки MFC
Эти исключения предназначены для использования в блоках try/catch. Обычно ка-
ждый производный класс служит для перехвата исключений определенного типа, но
можно сначала использовать класс CException, предназначенный для перехвата исклю-
чений всех типов, а затем - метод CObject::IsKindOf(), определяющий тип исключения (и
88
грамму обработки исключения от программного кода, который выполняется в нормаль-
ных ситуациях.

try                // начало блока try
{
      <операторы основной программы>          // код, в котором могут
                                              // генерироваться исключения
}
catch( <фильтр> ) // начало блока обработки исключений
{
       <код подпрограммы обработки исключений> // код, который выполняется
                                                  // при наличии исключения
}

     В любой своей реализации механизм структурированной обработки исключений
связывает блок защищаемого программного кода с подпрограммой обработки исключе-
ний. Если исключение происходит при выполнении защищаемого блока, управление пе-
редается фильтрующему выражению. Последнее обычно определяет тип исключения и
принимает решение о том, как продолжать его обработку. Исключения, прошедшие че-
рез фильтр, поступают в подпрограмму-обработчик. Если фильтр блокирует исключе-
ние, подпрограмма-обработчик не вызывается и система продолжает поиск процедуры,
которая возьмет на себя обработку этого исключения.
     Фильтрующее выражение может быть достаточно сложным. При необходимости
оно может даже вызывать отдельную функцию. Иногда фильтр сам выполняет обработ-
ку исключения, вследствие чего блок catch остается пустым. Во многих случаях для об-
работки исключительных ситуаций применяются MFC-класс CException и производные
от него классы. Каждый из классов этой группы предназначен для обработки опреде-
ленных типов исключений (таблица 3.2).
                                                                           Таблица 3.2
          Класс                                    Описание
CMemoryException          Исключение, вызванное нехваткой памяти
CNotSupportedException Запрос недопустимой операции
CArchiveException         Исключение при работе с архивами
CFileException            Исключение при выполнении операций с файлами
CResourceException        Ресурс не обнаружен или не может быть создан
COleException             OLE-исключение
CDBException              Исключение, возникающее при выполнении операций с база-
                          ми данных; генерируется ODBC-классами библиотеки MFC
COleDispatchException     Ошибка диспетчеризации (OLE-автоматизации)
CUserException            Исключение, связанное с невозможностью найти заданный
                          ресурс
CDaoException             Исключение, возникающее при работе с объектами доступа к
                          данным (Data Access Object, DAO); генерируется DАО-
                          классами библиотеки MFC
CInternetException        Исключение, связанное с работой в Internet; генерируется
                          Internet-классами библиотеки MFC

     Эти исключения предназначены для использования в блоках try/catch. Обычно ка-
ждый производный класс служит для перехвата исключений определенного типа, но
можно сначала использовать класс CException, предназначенный для перехвата исклю-
чений всех типов, а затем - метод CObject::IsKindOf(), определяющий тип исключения (и

                                         88