Вниз
Скачать: CL | DM;

Application.Terminate   Найти похожие ветки 

← →
a3a3ello   (2004-06-05 18:50) [0]

Не могу завершить приложение с помощью Application.Terminate. Программа благополучно продолжает работать дальше. В чем дело?
Спасибо.


← →
ikivio ©   (2004-06-05 19:36) [1]

Код в студию !


← →
YurikGl ©   (2004-06-05 19:39) [2]

ikivio ©   (05.06.04 19:36) [1]

Может аппликейшн другой?


← →
a3a3ello   (2004-06-05 19:51) [3]

аппликейшн у меня один.
А на счет кода. В одном из модулей есть процедура которая посылает сообщение об ошибке и завершает работу (должна завершать). Процедура вызывается из других процедур того же модуля. Может дело в том, что процедуры вложены несколько раз одна в другую ?

procedure SendErrorMSGandQuit();
begin
   Report(ErrTXT, GetDataForMail(0));
   Application.Terminate;
end;


← →
Petr V. Abramov ©   (2004-06-05 20:21) [4]


repeat
try
  HandleMessage;
except
  HandleException(Self);
end;
until Terminated;


 Это цитата из TApplication.Run
Application.Terminate всего лишь выставляет флажок Terminated, по которому прекращается цикл обработки сообщений. И от момента его выставления до момента проверки может пройти года 3 ( если приложение чего-то ждет)
 Это одно из напрвлений копания.


← →
a3a3ello   (2004-06-05 20:32) [5]

2Petr V. Abramov
Мое приложение ни чего не ждет. Оно продолжает работать как будто ни чего не произошло. Terminated я проверял оно стоит False.


← →
Marser ©   (2004-06-05 20:36) [6]


> Может аппликейшн другой?

Прикольно... Если такое и возможно(в чем сомневаюсь), подобные вопросы вряд ли бы возникли.


← →
lyeh ©   (2004-06-06 00:21) [7]

Может в Form.OnCloseQuery чего не так, вроде CanClose:=FALSE


← →
KilkennyCat ©   (2004-06-06 00:25) [8]

Значит, просто не доходит вызов до него.

procedure SendErrorMSGandQuit();
begin
  Report(ErrTXT, GetDataForMail(0));
  Showmessage("ща вырублюсь");
  Application.Terminate;
end;


← →
DrPass ©   (2004-06-06 00:53) [9]


> Оно продолжает работать как будто ни чего не произошло

Работать - в смысле обрабатывать сообщения пользователя? Нонсенс.
Или все-таки она что-то считает в "зависшем" положении? Тогда все правильно - выход осуществится лишь после окончания


← →
Ihor Osov'yak ©   (2004-06-06 00:58) [10]

2  a3a3ello

Вероятнее всего, у вас присутствует некая излишняя увлеченность Application.ProcessMessages или иные способы организации альтернативного цыкла выборки сообщений + некоторая неаккуратность в реализации архитектуры приложения.

Поставте точку прерывания в SendErrorMSGandQuit, при срабатывании этой точки проанализируйте стек (Ctrl+F3) - возможно у Вас в стеке будет присутствовать несколько  Application.ProcessMessages - тогда ситуацию вашу  можно обьяснить. Application.Terminate приведет к вызову PostQuitMessage(0), который "перебьет" только внутренний Application.ProcessMessages. Конечно, флажок Application.Terminated при этом будет выставлен, но дело в том, что "внутренние" Application.ProcessMessages никак этого флажка не анализируют.. И на этих "внутренних" Application.ProcessMessages приложение может "жить"  довольно долго.. Лишь бы сообщения поступали, чтобы цыкл внутри  ProcessMessages из-за отсутствия сообщений не прерывался..


← →
Ihor Osov'yak ©   (2004-06-06 01:03) [11]

2 [9] DrPass ©   (06.06.04 00:53)

Ну почему же?

Смотрим этот псевдокод:

Application.Terminate;
while TRUE do begin
  <что-то немножко делаем или считаем>
  Application.ProcessMessages;
end;

Здесь будет происходить примерно то, что описно в топике.

Конечно, в автора это может быть оформлено не в столь явном виде, но очень вероятно, что такой шедевр присутствует.



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.02 c
1-1086335644
Fast
2004-06-04 11:54
2004.06.20
Копировани котролов в RunTime


14-1086021870
выпускник
2004-05-31 20:44
2004.06.20
изложение 11 класс


3-1085637072
Draught
2004-05-27 09:51
2004.06.20
SQL запрос на вывод системной даты


9-1076765932
Cash
2004-02-14 16:38
2004.06.20
Че такое с DelphiX


1-1086542896
lena19
2004-06-06 21:28
2004.06.20
как получить из полного пути, имя вайла и его расширение




   Наверх