|
Вопрос # 5 312/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
Ситуация следующая. После возникновения исключения выполняется секция except. Выполняются операторы секции. Что происходит дальше? Куда идет процесс?
Вопрос возник в связи с тем, что после обработки исключения в секции работа приложения завершается, но почему-то не завершается процесс, порожденный приложением???
При повторном запуске приложения создается еще один процесс, и т.д.
Если те же действия выполняются в среде (в отладчике), то процесс завершается нормально.
Не понимаю, что происходит?
Заранее благодрю за ответ.
 |
Вопрос задал: Цыцарев Вадим Николаевич (статус: Посетитель)
Вопрос отправлен: 24 мая 2011, 14:48
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 25 мая 2011, 10:04; участников в обсуждении: 4.
|
Вадим К (статус: Академик), 24 мая 2011, 14:54 [#1]:
после обработки секции except, если не было сгененрировано новых исключений, программа продолжает выполняться следующей за end данного except командой.
Цитата:
Вопрос возник в связи с тем, что после обработки исключения в секции работа приложения завершается, но почему-то не завершается процесс, порожденный приложением???
Вот знаки вопроса там уместны, так как фраза малось странная.
Если уж придираться к словам, то приложение без "процесса" не может существовать.
Поэтому - либо показывайте код, либо ищите ошибку в районе 17 строки в втором файле слева.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 24 мая 2011, 14:56 [#2]:
Ну, для начала хотелось бы увидеть целиком твой блок try ... except ... end.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
bugmenot (статус: 3-ий класс), 24 мая 2011, 19:50 [#3]:
Цитата (Цыцарев Вадим Николаевич):
почему-то не завершается процесс, порожденный приложением???
Дочерний процесс, что-ли? (один вопросительный знак)
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
min@y™ (статус: Доктор наук), 24 мая 2011, 20:08 [#5]:
Исходник, похоже, имеет гриф "совершенно секретно"... Мы его так и не увидим.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Цыцарев Вадим Николаевич (статус: Посетитель), 24 мая 2011, 20:16 [#6]:
Нет! Там используется БД InterBase. Сейчас пытаюсь отсечь все лишнее.
|
|
min@y™ (статус: Доктор наук), 24 мая 2011, 20:41 [#7]:
Цитата (Цыцарев Вадим Николаевич):
Сейчас пытаюсь отсечь все лишнее.
Скопируй только конструкцию try ... except ... end. Или в ней 100500 строк кода?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Цыцарев Вадим Николаевич (статус: Посетитель), 24 мая 2011, 20:53 [#8]:
try
with DM do begin
with tbParam do begin
Open;
Name_Object:=DM.tbParamNAME.AsString;
z_tek:=FieldByName('Z_TEK').AsInteger;
nDelta:=FieldByName('nDelta').AsInteger;
if nDelta=0 then begin
nDelta:=30; //ââîä ïî óìîë÷àíèþ
Edit;
FieldByName('nDelta').AsInteger:=nDelta;
Post;
end;
T_mod1:=DM.tbParamT_MOD.AsInteger;
dt_mod1:=FieldByName('DT_MOD').AsInteger;
n_cykl_max:=FieldByName('N_CYKL_M').AsInteger;
n_Iter:=FieldByName('N_ITER').AsInteger;
To_TP:=FieldByName('T0_TP').AsInteger;
Cp:=FieldByName('CP').AsInteger;
PR_INTRPL:=FieldByName('PR_INTRPL').AsInteger;
Proc:=FieldByName('PROC').AsInteger;
Proc1:=FieldByName('PROC1').AsInteger;
Proc2:=FieldByName('PROC2').AsInteger;
DProc:=FieldByName('DPROC').AsInteger;
D_izg:=FieldByName('D_IZG').AsDateTime;
D_tek:=FieldByName('D_TEK').AsDateTime;
Reg_stat:=FieldByName('REG_STAT').AsString;
KWS:=FieldByName('KWS').AsInteger;
T_K:=FieldByName('T_K').AsInteger;
C_K:=FieldByName('C_K').AsInteger;
TAU_K:=FieldByName('TAU_K').AsInteger;
U_TO:=FieldByName('U_TO').AsFloat;
C_OTK:=FieldByName('C_OTK').AsFloat;
Reg_m:=StrToInt(FieldByName('REG_M').AsString);
BETA:=FieldByName('BETA').AsFloat;
gamma:=FieldByName('GAMMA').AsFloat;
end;
Opr_Nar0(D_izg,D_tek,Nar0);
tbGTipKE.Open;
tbTipKE.Open;
tbE1.Open;
tbE2.Open;
tbE3.Open;
tbE4.Open;
tbE5.Open;
tbE6.Open;
tbKE1.Open;
tbKE2.Open;
tbKE3.Open;
tbKE4.Open;
tbKE5.Open;
tbKE6.Open;
tbZR.Open;
tbCTO.Open;
tbWIDR.Open;
tbOTK.Open;
tbSTAT.Open;
tbPC.Open;
tbEC.Open;
tbFN.Open;
end;
DM.Master_Detal_tbERE(0);
E0:=tE.Create(nil,0);
Sozdan_ListEu(0);
ListEu.Sort(Comp_Eu_mo);
List_WidTO:=nil;
List_WidR:=nil;
Form1:=TForm1.Create(Self);
Form1.ShowModal;
Form1.Free;
except
Form_Zastavka.Free{Close};
Screen.Cursor:=crDefault;
ShowMessage('Îøèáêà ââîäà èç ÁÄ!?');
Close;
end;
В секции except все операторы исполняются.
|
|
min@y™ (статус: Доктор наук), 24 мая 2011, 21:21 [#9]:
АААААААААААААААААААААА!!!!!!11111
Это... это... это [censored] на [censored] и [censored] в рот! Мне теперь неделю кошмары сниться будут!
Для начала убери Close() из блока except.
И вообще, ошибки надо не экранировать, а находить и исправлять.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
13 мая 2013, 14:09: Статус вопроса изменён на решённый (изменил модератор DNK): Решен так решен...
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|