Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Утечка ресурсов и защита от нее

Читайте также:
  1. c. отношению цен ресурсов.
  2. III. БЕЗОПАСНОСТЬ И ЗАЩИТА ТУРИСТОВ, ТУРИСТСКИХ ДОСТОПРИМЕЧАТЕЛЬНОСТЕЙ И ОБЪЕКТОВ
  3. Автоматическая защита
  4. Аграрная политика современного государства. Защита прав сельскохозяйственного производителя в Украине.
  5. Анализ материальных ресурсов
  6. Анализ методик оценки эффективности управленческих решений, требующих использования финансовых или иных инвестиционных ресурсов
  7. Анализ общих проблем водных ресурсов.

Программы, построенные с использованием механизма исключительных ситуаций, обязаны придерживаться строгих правил распределения и освобождения таких ресурсов, как память, файлы, ресурсы операционной системы.

Представьте ситуацию: подпрограмма распределяет некоторый ресурс, но исключительная ситуация прерывает ее выполнение, и ресурс остается не освобожденным. Даже подумать страшно, к чему может привести такая ошибка: утечка памяти, файловых дескрипторов, других ресурсов операционной системы. Следовательно, ресурсы нуждаются в защите от исключительных ситуаций. Для этого в среде Delphi предусмотрен еще один вариант защищенного блока:

// запрос ресурса try // защищаемые операторы, которые используют ресурс finally // освобождение ресурса end;

Особенность этого блока состоит в том, что секция finally... end выполняется всегда независимо от того, происходит исключительная ситуация или нет. Если какой-либо оператор секции try... finally генерирует исключительную ситуацию, то сначала выполняется секция finally... end, называемая секцией завершения (освобождения ресурсов), а затем управление передается внешнему защищенному блоку. Если все защищаемые операторы выполняются без ошибок, то секция завершения тоже работает, но управление передается следующему за ней оператору. Обратите внимание, что секция finally... end не обрабатывает исключительную ситуацию, в ней нет ни средств ее обнаружения, ни средств доступа к объекту исключительной ситуации.


Рисунок 4.2. Логика работы оператора try…exсept…end

Блок try... finally... end обладает еще одной важной особенностью. Если он помещен в цикл, то вызов из защищенного блока процедуры Break с целью преждевременного выхода из цикла или процедуры Сontinue с целью перехода на следующую итерацию цикла сначала обеспечивает выполнение секции finally... end, а затем уже выполняется соответствующий переход. Это утверждение справедливо также и для процедуры Exit (выход из подпрограммы).

Как показывает практика, подпрограммы часто распределяют сразу несколько ресурсов и используют их вместе. В таких случаях применяются вложенные блоки try... finally... end:

// распределение первого ресурса try ... // распределение второго ресурса try // использование обоих ресурсов finally // освобождение второго ресурса end; ... finally // освобождение первого ресурса end;

Кроме того, вы успешно можете комбинировать блоки try... finally... end и try... exсept... end для защиты ресурсов и обработки исключительных ситуаций.


Дата добавления: 2015-12-08; просмотров: 81 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.007 сек.)