Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.037 c
14-1086070455
ИМХО
2004-06-01 10:14
2004.06.20
ATM-карта


14-1086256838
ilnarab
2004-06-03 14:00
2004.06.20
Потерял исходники


4-1084469493
Vasya.ru
2004-05-13 21:31
2004.06.20
изменение/измерение скорости работы привода?


8-1080807221
ИЛЕЙ
2004-04-01 12:13
2004.06.20
Замедление и ускорение звука


3-1085676104
JurMax
2004-05-27 20:41
2004.06.20
Компоненты для чтения DXF формата