Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.031 c
1-1086516192
Larry Laffer
2004-06-06 14:03
2004.06.20
Функция в DLL


14-1086234959
try
2004-06-03 07:55
2004.06.20
Shareware


1-1086676624
Timon
2004-06-08 10:37
2004.06.20
ExcelApplication1.Workbooks[0].SaveAs ОШИБКА


4-1084536722
Алексей Шолкин
2004-05-14 16:12
2004.06.20
вопрос по написанию программы передачи данных через порты


1-1086637381
som
2004-06-07 23:43
2004.06.20
Альбомная страница по умолчанию при печати





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский