| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Закрыть программу при выполнении Delay |
| Автор: razumsap 2.7.2010, 13:13 |
| Собственно вопрос. Как закрыть программу, если стоит задержка Delay-ем 10 минут, форма не риагирует на закрытие. Только через диспетчер задачь могу грохнуть, хотелось бы корректно. |
| Автор: Alexeis 2.7.2010, 13:41 | ||
Сбрасываешь флаг Terminated в true и ожидание прекращается. |
| Автор: Keeper89 2.7.2010, 13:47 |
| Только or вместо ||. |
| Автор: Alexeis 2.7.2010, 13:49 | ||
| Keeper89, эта болезнь называется С++ Еще такой момент. Если флаг устанавливать в OnClose, то в цикл нужно чуток переделать
|
| Автор: Frees 2.7.2010, 14:03 |
| флаг уже есть: Application.Terminated |
| Автор: Alexeis 2.7.2010, 14:12 |
VCL Здорово, значит обработчик OnClose даже не нужен, только Application.ProcessMessages(); для обработки сообщения о завершении. |
| Автор: CodeMonkey 2.7.2010, 14:21 | ||
| Только по обнаружению признака Terminated лучше бы делать Abort. Потому что вызывающий может быть устроен так:
Что с того, что Delay выйдет раньше времени, если вызывающий просто продолжает работу без попыток анализа флага? |
| Автор: Keeper89 2.7.2010, 14:22 |
З.Ы. Судя по всему ТС наставил минусов и убежал ) |
| Автор: CodeMonkey 2.7.2010, 15:09 | ||
Должен. Ведь от AV никто не застрахован. А даже если нет - мы ведь всё равно выходим из программы. Автор, вон, вообще Terminate процессу делал до этого. |
| Автор: razumsap 2.7.2010, 15:09 |
| Понравилось такая штука Halt(4); жаль что несовсем то что я хотел |
| Автор: Alexeis 2.7.2010, 15:30 | ||
На самом деле, если возникло неожиданное AV, то программу можно смело закрывать. Дальнейшее поведение непредсказуемо. Поэтому не согласен на счет AV. Другое дело, что многие классы VCL генерят программные исключения, как стандартный механизм уведомления об ошибке. И тем не менее вопрос состоит в том,
Многие ведь не используют try finally (или используют исключительно редко), так что твой Abort() произвел бы аварийное завершение без сохранения данных пользователя |
| Автор: CodeMonkey 2.7.2010, 19:51 | ||
AV <> EDivByZero. C++ fail. |