C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Выделение из очереди события OnTimer, Помогите Плиз.
Гость_Иван
Отправлено: 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?
Он вроде для этого и предназанчен biggrin.gif

P.S. Там можно и флажок взвести... cool.gif
Гость_Иван
Отправлено: 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++;

Вернуться в Вопросы программирования в C++Builder