Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.26;
Скачать: CL | DM;

Вниз

Прерывание рассчета в случае исключения   Найти похожие ветки 

 
R2D2   (2003-05-13 20:45) [0]

Программа осуществляет рассчет (по нажатию кнопки). В этой процедуре вызываются функции (те в свою очередь вызывают еще "более глубокие" функции). В "опасной" функции вставлен обработчик try...except. Проблема состоит в том, чтобы в случае перехвата исключения перепрыгнуть (goto) сразу в конец процедуры-обработчика нажатия кнопки. Т.е: как выйти из "опасной" функции сразу в procedure TMain_Form.SolveButtonClick(Sender: TObject); (не проверять же в каждой функции было ли исключение в какой-нибудь из "подфункций")


 
shane54 ©   (2003-05-13 21:16) [1]

Если не ошибаюсь, вроде бы после возникновения исключения выполнение прерывается и ищется ловушка except. Соответственно не делая обработку исключения в "подфункциях", а только в самом обработчике на кнопку, можно добиться того, что он сработает в любом случае. Только его надо грамотно построить - т.е. сначала проверять ошибки деления на 0 (или что у тебя там может выскочить в твоих функциях), потом выход за пределы типов и уже в конце конструкцию типа

on E: Exception do

которая перехватит любое исключение.

Всё IMHO т.к. точно не помню.


 
Proton ©   (2003-05-14 06:46) [2]

procedure TForm1.Button1Click(Sender: TObject);
procedure sub;
begin
try
showmessage(inttostr(strtoint("0") mod strtoint("0")));
except
showmessage("??????? ?? ????!!!");
abort;
end;
end;
begin
sub;
showmessage("test");
end;


 
Спрашивающий   (2003-05-14 07:47) [3]

Любая подфункция может быть прописана в теле основной
с проверкой исключения
..................
try
Подфункция1(имя)
Подфункция2(имя)
.....................
except
Здесь если написать Exit основная
завершит свою работу, поэтому проблемы я не вижу.

end
.......................


 
JohnnyJ ©   (2003-05-14 12:19) [4]

Породить в блоке try..except "опасной" ф-йии исключение EAbort и все дела.


 
Bel ©   (2003-05-14 13:01) [5]

В процедуре TMain_Form.SolveButtonClick вызов функции сделать в блоке try...except. А в "более глубоких" функциях после обработки исключения, если надо, возбудить его опять (raise). Тогда исключение попадёт в блок except из TMain_Form.SolveButtonClick, а дальше делай, что хочешь.



Страницы: 1 вся ветка

Текущий архив: 2003.05.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
4-83832
Angel Potion
2003-03-24 19:54
2003.05.26
Как можно ненадолго (на несколько миллисекунд) приостановить выполнение потока, и чтобы при этом поток не тормозил всю систему. Sleep с количеством миллисекунд тормозит, и причём изрядно.


1-83549
MAZA
2003-05-11 17:09
2003.05.26
TextFile


1-83494
MegaVolt
2003-05-14 11:40
2003.05.26
Как правильно добавлять данные в StringGrid?


14-83679
-=DeMoH=-
2003-05-04 12:56
2003.05.26
КАК УЗНАТЬ, ЧТО НУЖНО ПРОГЕ?


3-83379
Niki
2003-05-06 12:19
2003.05.26
T-SQL