Главная страница
    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.46 MB
Время: 0.043 c
15-1155881337
boriskb
2006-08-18 10:08
2006.09.10
А ты не воруй!


15-1155627150
vidiv
2006-08-15 11:32
2006.09.10
Вопрос по HTML про <img ismap> и javascript


5-1139238792
webpauk
2006-02-06 18:13
2006.09.10
Показать поля БД


2-1156146595
novill
2006-08-21 11:49
2006.09.10
Философское. Как правильнее выйти из процедуры?


2-1155665628
Edu.1982
2006-08-15 22:13
2006.09.10
Карты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский