Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

почему 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  сообщений уже нет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо