Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрыть программу при выполнении Delay 
:(
    Опции темы
razumsap
Дата 2.7.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Собственно вопрос.
Как закрыть программу, если стоит задержка Delay-ем 10 минут, форма не риагирует на закрытие.
Только через диспетчер задачь могу грохнуть, хотелось бы корректно.
PM MAIL ICQ   Вверх
Alexeis
Дата 2.7.2010, 13:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Код

i := 500 * 60;
while (not Terminated) or (i <> 0)
do
   begin
     dec(i);
     Sleep(20);
   end;


Сбрасываешь флаг Terminated в true и ожидание прекращается.

Это сообщение отредактировал(а) Alexeis - 2.7.2010, 13:48


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Keeper89
Дата 2.7.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Только or вместо ||.


--------------------
PM MAIL WWW   Вверх
Alexeis
Дата 2.7.2010, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Keeper89, эта болезнь называется С++  smile 

Еще такой момент. Если флаг устанавливать в OnClose, то в цикл нужно чуток переделать
Код

i := 500 * 60;
while (not Terminated) or (i <> 0)
do
   begin
     dec(i);
     Sleep(20);
     Application.ProcessMessages();
   end;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Frees
Дата 2.7.2010, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



флаг уже есть: Application.Terminated

Это сообщение отредактировал(а) Frees - 2.7.2010, 14:04


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Alexeis
Дата 2.7.2010, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Frees @  2.7.2010,  13:03 Найти цитируемый пост)
флаг уже есть: Application.Terminated

VCL  smile 

Здорово, значит обработчик OnClose даже не нужен, только Application.ProcessMessages(); для обработки сообщения о завершении.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
CodeMonkey
Дата 2.7.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Только по обнаружению признака Terminated лучше бы делать Abort.

Потому что вызывающий может быть устроен так:

Код
Delay(10000);
// и пошли дальше работать!


Что с того, что Delay выйдет раньше времени, если вызывающий просто продолжает работу без попыток анализа флага?



--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Keeper89
Дата 2.7.2010, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Цитата(Alexeis @  2.7.2010,  13:49 Найти цитируемый пост)
эта болезнь называется С++  smile 

smile и у меня бывает.

З.Ы. Судя по всему ТС наставил минусов и убежал )


--------------------
PM MAIL WWW   Вверх
Alexeis
Дата 2.7.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(CodeMonkey @  2.7.2010,  13:21 Найти цитируемый пост)
Только по обнаружению признака Terminated лучше бы делать Abort.

  Но ведь тогда не будет возможности произвести завершающие операции в программе. Или ты имеешь ввиду, что код должен быть помещен в try finally end, а все завершающие операции помещены в finally ?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
CodeMonkey
Дата 2.7.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(Alexeis @  2.7.2010,  15:38 Найти цитируемый пост)
Или ты имеешь ввиду, что код должен быть помещен в try finally end, а все завершающие операции помещены в finally ? 

Должен. Ведь от AV никто не застрахован.

А даже если нет - мы ведь всё равно выходим из программы. Автор, вон, вообще Terminate процессу делал до этого. 


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
razumsap
Дата 2.7.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Понравилось такая штука 

Halt(4);
жаль что несовсем то что я хотел

Это сообщение отредактировал(а) razumsap - 5.7.2010, 08:16
PM MAIL ICQ   Вверх
Alexeis
Дата 2.7.2010, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(CodeMonkey @  2.7.2010,  14:09 Найти цитируемый пост)
Должен. Ведь от AV никто не застрахован.

  На самом деле, если возникло неожиданное AV, то программу можно смело закрывать. Дальнейшее поведение непредсказуемо. Поэтому не согласен на счет AV. Другое дело, что многие классы VCL генерят программные исключения, как стандартный механизм уведомления об ошибке.

Цитата(CodeMonkey @  2.7.2010,  14:09 Найти цитируемый пост)
Автор, вон, вообще Terminate процессу делал до этого.  
 И тем не менее вопрос состоит в том,
Цитата(razumsap @  2.7.2010,  12:13 Найти цитируемый пост)
Только через диспетчер задачь могу грохнуть, хотелось бы корректно


Многие ведь не используют try finally (или используют исключительно редко), так что твой Abort() произвел бы аварийное завершение без сохранения данных пользователя smile . 

 smile как оказалось плюсовые try catch по стандарту не обрабатывают аппаратные исключения. Вероятно, по тем же соображениям, что после такой ситуации правильнее всего завершить приложение сразу, пока оно не испортило данные пользователя. 



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
CodeMonkey
Дата 2.7.2010, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(Alexeis @  2.7.2010,  16:30 Найти цитируемый пост)
Вероятно, по тем же соображениям, что после такой ситуации правильнее всего завершить приложение сразу, пока оно не испортило данные пользователя. 

AV <> EDivByZero. C++ fail.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0853 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.