![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
почему OnIdle перестает вызываться [D7, 2003]
SkyN © (2009-04-07 14:45:00)почему OnIdle перестает вызываться, если не трогаю приложение некоторое время?
Германн (2009-04-09 00:23:00) [1]
> Сергей М. © (08.04.09 23:00) [12]
>
>
> > хочу, чтобы каждый раз, когда пользователь поменял настройки,
>
> > произошло событие от таймера,
>
>
> Можно подумать, что какой-то там бедняга-пользователь, "меняющий
> настройки", обязан "по твоему хотенью" знать о каком-то
> там "таймере"..
>
Неверно прочитал. Там не было никакой причинно-следственной связи между сменой настроек и событиями таймера.
P.S.
Но сама задача мне плохо ясна.
Сергей М. (2009-04-08 23:00:00) [2]
> хочу, чтобы каждый раз, когда пользователь поменял настройки,
> произошло событие от таймера,
Можно подумать, что какой-то там бедняга-пользователь, "меняющий настройки", обязан "по твоему хотенью" знать о каком-то там "таймере"..
Sapersky (2009-04-08 16:16:00) [3]ИМХО, проще и надёжнее выставлять какой-то флаг и проверять его в таймере.
OnIdle с Done = True предназначено, как мне кажется, в основном для определения момента завершения пользовательского ввода. При этом можно выполнить некие "отложенные" второстепенные действия, которые нежелательно вешать на события контролов во избежание заметных тормозов (например, действие продолжительностью 100-200 мс в OnMouseMove). Ещё можно (и даже лучше) вынести эти действия в отдельный поток, но это требует синхронизации; OnIdle в этом смысле проще.
SkyN (2009-04-08 15:44:00) [4]мне не надо чтобы событие было в цикле, т.е. Done я регулярно ставлю в True. Но я хочу, чтобы каждый раз, когда пользователь поменял настройки, произошло событие от таймера, пришли данные по DDE, моё приложение отреагировало на любое событие windows, в любом из этих случаев последним действием (т.е. очередь событий пуста) вызвался бы мой код.
но если пришло много данных по DDE, то мой код должен вызваться только один раз.
{RASkov} (2009-04-07 20:06:00) [5]> [4] SkyN (07.04.09 16:08)
Вообще верное замечание [3] по поводу записи лога в данном событии.... Оно точно не для этого...
А вот Done нужно False ставить, чтоб данное событие не переставало генерироваться....
Игорь Шевченко (2009-04-07 17:46:00) [6]
> от таймера
от таймера оно не возникнет
SkyN (2009-04-07 17:42:00) [7]от таймера
таймер исправно, раз в секунду, срабатывает
Anatoly Podgoretsky (2009-04-07 16:26:00) [8]Так откуда оно возникнет, если "не трогать приложение"
Сергей М. (2009-04-07 16:22:00) [9]
> дальше, если не трогать приложение, то ..от OnIdle сообщений уже нет
Потому что событие Idle не происходит.
Соответственно процедура OnIdle не вызывается.
SkyN (2009-04-07 16:08:00) [10]to {RASkov}:
Done по логике программы могу возвращать разную. в логе информации о том что возвращаю сейчас нет.
to Amoeba:
т.е. проблема в записи лог файла? ещё какие ограничения есть? )))
Amoeba (2009-04-07 15:22:00) [11]Не надо запихивать запись лога в OnIdle. Это событие не для этого существует.
{RASkov} (2009-04-07 15:11:00) [12]> [0] SkyN (07.04.09 14:45)
А с var Done: Boolean у тебя что?
SkyN (2009-04-07 14:50:00) [13]добавлю, что на форме таймер, который раз в секунду исправно пишет в лог файл.
процедура OnIdle тоже пишет какое то время. дальше, если не трогать приложение, то таймер продолжает писать, а вот от OnIdle сообщений уже нет.