![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 09.02.2012
Сообщений: 8
|
![]()
Добрый день. Знаю, что подобных тем много, но все, что пересмотрел -перепробовал - не помогает.
Итак, ситуация: имеется прога, работает в фоновом режиме (формы от пользователя скрыты), раз в 5 минут выполняет вычисления, записывает в файл, потом sleep(300000), потом снова вычисления, потом опять sleep и так все в цикле. Все работает нормально, но при выключении компа появляется окно завершения программы, потом программа не отвечает и предложение принудительно завершить, это не есть хорошо. Пробовал ловить WM_QUERYENDSESSION: private { Private declarations } Procedure WMQueryEndSession(Var Message: TMessage); Message WM_QUERYENDSESSION; Procedure TForm1.WMQueryEndSession(Var Message: TMessage); begin inherited; Application.Terminate; // пробовал и Form1.Close; Message.Result:=1; End; не помогает Может sleep чем-то заменить или какие другие варианты есть? Может я не правильно отлавливаю WM_QUERYENDSESSION? сам sleep и все вычисления в другой процедуре, может их как-то завязать нужно? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
При выполнении sleep сообщения не обрабатываются. Попробуйте с помощью таймера это сделать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 09.02.2012
Сообщений: 8
|
![]()
Аватар
Спасибо за предложение, но придумал другой вариант: поставил sleep в цикл, уменьшил задержку и после sleepа вставил Application.ProcessMessages() теперь срабатывает нормально |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Не правильно делаете!
Код:
Иначе ваша програма закроется не закончив собственную финализацию(Сохранение данных, уничтожение обьектов, подготовка к завершению). Код:
|
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 09.11.2007
Сообщений: 1,762
|
![]()
И всё таки в Вашем случае правильнее удобнее будет использовать таймер.
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 09.02.2012
Сообщений: 8
|
![]()
Человек_Борща Спасибо.
inherited; - поменял положение, а финализировать-то в проге особо нечего, объекты не использую, только несколько переменных FaTaL Вариант с таймером еще рассмотрю |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
не опязательно таймер. Просто удерживайте QUERTYENDSESSION до завершения sleep'а.
перед слипом ставье некоторую перемнную в true, потом While smth do begin end else begin nherited; end; все. |
![]() |
![]() |
![]() |
#8 |
Регистрация: 09.02.2012
Сообщений: 8
|
![]()
таки поставлю точку в теме.
таймер оказался наилучшим вариантом: код проще, sleep, так или иначе, теперь не мешает никаким процессам. Всем спасибо за участие. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ожидание завершения потока при выключении службы | 3D Hunter | Общие вопросы Delphi | 15 | 27.08.2011 14:55 |
Завершение работы ОС в определенное время | LSpirit | Общие вопросы Delphi | 4 | 04.08.2011 11:20 |
Синий экран при выключении | bookkc | Помощь студентам | 2 | 19.11.2010 14:59 |
При выключении компьютера периферия отключаются сама. | Elsanit | Компьютерное железо | 0 | 05.10.2009 09:28 |
При завершение работы программы появляется окно Microsoft Visual C++ Debug Library | TheWanderer | Visual C++ | 2 | 25.11.2008 00:27 |