Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

Не убивается таймер после цикла сообщений   Найти похожие ветки 

 
NikIta88 ©   (2006-08-23 19:54) [0]

Всем привет! Создаю таймер в безоконном приложении (не консольном), создаю цикл для обработки сообщений,
но при перзагрузке/завершении работы Windows KillTimer не вызывается. Что я не правильно сделал?

program MyTimer;

uses
 Windows, SysUtils, Dialogs;

procedure TimerProc (hw: HWND; uMsg,idEvent: Integer; dwTime: LongWord); stdcall;
begin
ShowMessage("TimerProc");
end;

var
 TimerID: cardinal;
 msg: TMsg;
begin
 TimerID := SetTimer(0,0,10000,@TimerProc);

 while GetMessage(msg,0,0,0) do DispatchMessage(msg);
 { этот код не выполняется }
 ShowMessage("End Message loop");
 if KillTimer(0,TimerID) then
   ShowMessage("KillTimer: OK")
 else
   ShowMessage("KillTimer: ERROR");
end.


 
Ketmar ©   (2006-08-23 19:55) [1]

мне даже лениво проверять, но: тебе это не даёт спать? всё равно винды переинициализируются, фиг с ним, с этим вызовом. ы?


 
Anatoly Podgoretsky ©   (2006-08-23 20:23) [2]

что говорит GetLastError


 
NikIta88 ©   (2006-08-23 20:25) [3]

Но пучему цикл не завершается, если в MSDN написано, что GetMessage возвратит FALSE, если получит WM_QUIT?


 
palva ©   (2006-08-23 20:46) [4]

Значит она не получает  WM_QUIT. Вообще-то программа должна сама выдать PostQuitMessage, после того как аккуратно закроет всё с чем работала. То есть WM_QUIT должно исходить из вашей программы. Ловите в вашем цикле сообщение WM_DESTROY, и вызывайте при этом условии PostQuitMessage. Но пошлет ли система при выключении вашему безоконному треду WM_DESTROY тоже вопрос.


 
Ketmar ©   (2006-08-23 20:49) [5]

> [3] NikIta88 ©   (23.08.06 20:25)
а, так надо, чтобы завершалось, а не чтобы вызывалось? а сразу написать об этом? опять мастаки в гестапо играют...
может, ввести правило: перед задаванием вопроса каждому участнику форума автор обязан выслать по телепатору?


 
Пусик ©   (2006-08-23 20:59) [6]

Вообще-то у тебя таймер не использует оконную процедуру.


 
NikIta88 ©   (2006-08-23 21:16) [7]

Пожалуй оставлю все как есть, т.к программа все равно работает до перезагрузки/завершения

Всем спасибо!


 
Leonid Troyanovsky ©   (2006-08-23 21:16) [8]


> NikIta88 ©   (23.08.06 20:25) [3]

> Но пучему цикл не завершается, если в MSDN написано, что
> GetMessage возвратит FALSE, если получит WM_QUIT?


А почему это оно должно получать WM_QUIT?

Если б у приложения было окно, то оно бы получило
WM_QUERYENDSESSION & WM_ENDSESSION.
Если б это была консоль, то она получило бы
CTRL_LOGOFF_EVENT & CTRL_SHUTDOWN_EVENT,
если б, конечно, озаботилась SetConsoleCtrlHandler.

Ну, а в противном случае, ничего, кроме вульгарного
терминирования, оно не заслужило.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2006.09.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
15-1155559967
Desdechado
2006-08-14 16:52
2006.09.10
Странные случаи из жизни


2-1156264773
Gagarin
2006-08-22 20:39
2006.09.10
как Добавить прогу в контекстное меню аля Winrar


2-1156272009
anton773
2006-08-22 22:40
2006.09.10
Shellexecute


15-1155186777
Bless
2006-08-10 09:12
2006.09.10
Даешь Бали! (практически не оффтоп)


15-1155899398
Труп Васи Доброго
2006-08-18 15:09
2006.09.10
Пока!