Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Топ:
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Интересное:
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Дисциплины:
2018-01-04 | 176 |
5.00
из
|
Заказать работу |
|
|
Основными недостатками стандартной обработки исключений являются недружественность пользовательского интерфейса, связанная с выводом неинформативных для пользователя сообщений на английском языке, и проблема утечки ресурсов.
Рассмотрим пример утечки ресурсов в случае возникновения исключения: AssignFile (F, 'a.fcmp'); Rawrite (F); Hew (P);
...// Код., генерирующий исключение Erase (F); Dispose (P);
При возникновении исключения, вычисления в текущем блоке прерываются и управление, в отсутствие обработчика исключения, передается р вышестоящий блок. Таким образом, в случае возникновения исключения, файл не удалится, а
память не очистится. Для того чтобы избежать утечки ресурсов, можно
использовать специальную конструкцию обработки исключения: try...finally. Try
«операторы, способные привести к исключению» finally
«операторы, выполняемые в любом случае» end;
В этом случае операторы в разделе finally будут выполняться всегда, независимо от того было исключение или нет. После выполнения этих операторов вычисление прерывается. Например: AssignFile (F, 'a.tmp'); Rewrite (F); New (P); try
Код, генерирующий исключение finally
Erase (F); Dispose (P); ' end;
В разделе finally неудобно описывать реакцию на исключение, поскольку он не предоставляет механизма доступа к объекту исключения. Поэтому разделы
except, и finally могут использоваться совместно. Например: try try
Код, генерирующий исключение. finally
End; j
Except
end;
Защита кода зачистки на уровне модуля в разделе finalization
Рассмотренный выше блок try...finally позволяет защитить ресурсы внутри блока. Для глобальных ресурсов модуля существует другой способ выделения и инициализации ресурсов, защищенный от утечки ресурсов. Он реализуется с помощью двух специальных включаемых в модуль разделов initialization и finalization. Раздел initialization, выполняемый один раз при первом упоминании в программе данного модуля, можно использовать для однократного выделения необходимых глобальных ресурсов. А раздел finalization, гарантированно выполняемый в конце работы программы независимо от наличия или отсутствия исключений, можно использовать для зачистки ранее выделенных ресурсов.
|
Например, необходимо после завершения работы программы удалить все файлы *.tmp из каталога dirtmp:
unit....;Н
var ь
SR: TSearchRec; F: File;
Result: integer; initialization
Finalization
result:= FindFirst (dirtmp + '«.trap', faAnyFile, SR); while result = 0 do begin
AssignFile (F, dirtmp+SR.name); Erase <F); result FindNext end;
FindClose (SR); end.
Исключение EAbort и функция Abort В Delphi имеется исключение EAbort, несколько отличающееся от рассмотренных ранее. Генерация этого исключения, как и любых других, прерывает процесс вычисления. Но, если приложение не отлавливает оператором on исключений этого класса, то они попадают в обработчик TApplication.HandleException, и там, в отличие от других исключений, разрушаются без всяких сообщений. Таким образом, это исключение - молчаливое прерывание процесса вычисления, при котором не должно отображаться диалоговое окно с сообщением об ошибке.
Простейший путь генерации исключения EAbort - вызов функции Abort.
Например:
if «проверка условия прерывания» then Abort;
Обычное применение EAbort - прерывание вычислений при проверке некоторого условия окончания или прерывания пользователем, что эквивалентно применению Exit и Break. Отличие Abort от Exit и Break заключается в том, что Break прерывает только цикл и управление передается следующему за ним оператору, Exit прерывает только текущую процедуру и передает управление в вызвавшую ее процедуру. Abort прерывает текущую процедуру и все вызвавшие ее процедуры, передавая управление на самый верх. Таким образом, это наиболее простой возврат из глубоко вложенных процедур. Впрочем, можно при необходимости перехватить исключение на каком-то промежуточном уровне, предусмотрев на нем блок try...except и вставив в его раздел except
|
соответствующий оператор on: on EAbort do...;
Базовый класс исключений Exception Все предопределенные в Delphi классы исключений являются прямыми или косвенными наследниками класса Exception, объявленного в модуле SysUtils и наследующего непосредственно TOb ject. Exception = class(TObject) private
|
|
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!