|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.02.2012, 14:01 | #1 |
Регистрация: 09.02.2012
Сообщений: 8
|
Завершение программы при выключении ПК (во время sleep-а)
Добрый день. Знаю, что подобных тем много, но все, что пересмотрел -перепробовал - не помогает.
Итак, ситуация: имеется прога, работает в фоновом режиме (формы от пользователя скрыты), раз в 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 и все вычисления в другой процедуре, может их как-то завязать нужно? |
13.02.2012, 14:54 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
При выполнении sleep сообщения не обрабатываются. Попробуйте с помощью таймера это сделать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
13.02.2012, 15:26 | #3 |
Регистрация: 09.02.2012
Сообщений: 8
|
Аватар
Спасибо за предложение, но придумал другой вариант: поставил sleep в цикл, уменьшил задержку и после sleepа вставил Application.ProcessMessages() теперь срабатывает нормально |
13.02.2012, 16:31 | #4 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Не правильно делаете!
Код:
Иначе ваша програма закроется не закончив собственную финализацию(Сохранение данных, уничтожение обьектов, подготовка к завершению). Код:
|
13.02.2012, 16:34 | #5 |
Участник клуба
Регистрация: 09.11.2007
Сообщений: 1,762
|
И всё таки в Вашем случае правильнее удобнее будет использовать таймер.
|
13.02.2012, 17:02 | #6 |
Регистрация: 09.02.2012
Сообщений: 8
|
Человек_Борща Спасибо.
inherited; - поменял положение, а финализировать-то в проге особо нечего, объекты не использую, только несколько переменных FaTaL Вариант с таймером еще рассмотрю |
13.02.2012, 17:09 | #7 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
не опязательно таймер. Просто удерживайте QUERTYENDSESSION до завершения sleep'а.
перед слипом ставье некоторую перемнную в true, потом While smth do begin end else begin nherited; end; все. |
29.02.2012, 18:01 | #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 |