Гость_Иван |
Отправлено: 03.10.2003, 07:24 |
|
Не зарегистрирован
|
Имеется цикл
while(...)
{
...
...
...
}
внутри этого цикла необходимо проверять произошло ли событие OnTimer (если да, то обработать), но только оно (ProcessMessages не подходит). Как это сделать? Я знаю что не обходимо использовать конструкцию типа
if(PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))
{
if(!GetMessage (&msg, NULL, 0, 0)) break;
TranslateMessage (&msg);
DispatchMessage (&msg);
}
Но не знаю что записать в msg, что бы он куазывал на нужное мне событие.
Для определенности таймер TTimer* Timer.
Событие OnTimer |
|
Asher |
Отправлено: 03.10.2003, 08:54 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
А нельзя по-простому все действия сделать в обработчике OnTimer?
Он вроде для этого и предназанчен
P.S. Там можно и флажок взвести...
|
|
Гость_Иван |
Отправлено: 03.10.2003, 09:06 |
|
Не зарегистрирован
|
Нет нельзя.
В цикле
while()
{
...
...
...
}
Обработчик не работает потому, что событие WM_TIMER (да вообще события) не обрабатываются. Что бы обрабатывались нужно вставит в цикл Application->ProcessMessages, но тогда будут обрабатываться все события включая OnTimer, но нужно чтобы обрабатывалось только OnTimer. |
|
Admin |
Отправлено: 03.10.2003, 14:37 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Так выставляйте в событии onTimer некий флаг.
Изначально int flag = 0;
В событии onTimer() {
flag = 1; // то есть произошло событие — onTimer
}
а в цикле проверяйте этот флаг
while(...){
...
if(flag == 1) ... некие действия
и опять сбрасывайте флаг flag = 0
...
}
-----
Таким образом можете также узанавать сколько раз
произошло событие onTimer с момента последнего
сброса флага,
тогда в событии onTimer вместо flag = 1; напишите flag++;
|
|