
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.188] |
![]() |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Это как - два раза одно исключение?
|
Сообщ.
#17
,
|
|
|
Таким, что в винде единый супернавороченный механизм обработки исключений, как хардварных (типа деления на 0 или AV), так и любых пользовательских, генерируемых через RaiseException. Тут тебе и повышение приоритета обработки исключения, и сохранение\восстановление нихилых структур данных типа контекста потока и "уйма" процессороного времени - порядка нескольких тысяч тактов при отсутствии отладчика и несколько сотен тысяч тактов при наличии отладчика (даже если он не реагирует на исключение, а просто уведомляется системой). И все это вместо того, чтобы просто "втихую" проверить if Handle < 0 then ... за пару тактов процессора ?! |
Сообщ.
#18
,
|
|
|
Цитата Alexander N @ Это как - два раза одно исключение? Сначала Delphi перехватывает исключение и показывает сообщение с ошибкой пользователю, затем вновь поднимает это же исключение в выполняющейся программе. Т.е. этап обработки исключения самим Delphi - совершенно лишний. |
Сообщ.
#19
,
|
|
|
Цитата Демо @ Сначала Delphi перехватывает исключение и показывает сообщение с ошибкой пользователю, затем вновь поднимает это же исключение в выполняющейся программе. Т.е. этап обработки исключения самим Delphi - совершенно лишний Это неверная интерпретация, т.к. отладчик никакие исключения (кроме своих брикпойнтов) не обрабатывает и ничего вновь не "поднимает", а просто выводит сообщение\предупреждение о возникшем исключении и дает возможность юзеру продолжить обработку либо в пошаговом режиме с заходом в except\finally, или просто продолжить\проскочить все по F9 |
Сообщ.
#20
,
|
|
|
Согласен, неверно выразился.
|
Сообщ.
#21
,
|
|
|
В догонку: все же отключать останов на всех исключениях, это "не есть гуд". Но если есть компоненты или просто часть кода, которая "грешит" тем, что часто\непрерывно генерит эксепшены определенного типа, то можно добавить этот тип эксепшена в список Exception Types to Ignore и соотв-но игнорить не все исключения, а лишь определенные. В частности в примере Alexander N можно было бы добавить в список EFOpenError, чтобы не надоедали ошибки открытия файлов
|
Сообщ.
#22
,
|
|
|
leo, по поводу класса TFileStream и THandleStream Ваша взяла
![]() |
Сообщ.
#23
,
|
|
|
Цитата leo @ И все это вместо того, чтобы просто "втихую" проверить if Handle < 0 then ... за пару тактов процессора ?! Ну скажем не просто "не проверить". А дать возможность написать только код для нормального случая. Не засоряя его всеми этими проверками. А что будет, если файл не найден? А что будет, если он пустой? (я, надеюсь, ReadBeffer используется?) А что будет, если формат данных неверен? |