Вниз
Скачать: CL | DM;

почему OnIdle перестает вызываться   Найти похожие ветки 

 
SkyN   (2009-04-07 14:45) [0]

почему OnIdle перестает вызываться, если не трогаю приложение некоторое время?


 
SkyN   (2009-04-07 14:50) [1]

добавлю, что на форме таймер, который раз в секунду исправно пишет в лог файл.
процедура OnIdle  тоже пишет какое то время. дальше, если не трогать приложение, то таймер продолжает писать, а вот от OnIdle  сообщений уже нет.


 
{RASkov} ©   (2009-04-07 15:11) [2]

> [0] SkyN   (07.04.09 14:45)

А с var Done: Boolean у тебя что?


 
Amoeba ©   (2009-04-07 15:22) [3]

Не надо запихивать запись лога в OnIdle. Это событие не для этого существует.


 
SkyN   (2009-04-07 16:08) [4]

to {RASkov}:
Done по логике программы могу возвращать разную. в логе информации о том что возвращаю сейчас нет.
to Amoeba:
т.е. проблема в записи лог файла? ещё какие ограничения есть? )))


 
Сергей М. ©   (2009-04-07 16:22) [5]


> дальше, если не трогать приложение, то ..от OnIdle  сообщений уже нет


Потому что событие Idle не происходит.
Соответственно процедура OnIdle не вызывается.


 
Anatoly Podgoretsky ©   (2009-04-07 16:26) [6]

Так откуда оно возникнет, если "не трогать приложение"


 
SkyN   (2009-04-07 17:42) [7]

от таймера
таймер исправно, раз в секунду, срабатывает


 
Игорь Шевченко ©   (2009-04-07 17:46) [8]


> от таймера


от таймера оно не возникнет


 
{RASkov} ©   (2009-04-07 20:06) [9]

> [4] SkyN   (07.04.09 16:08)

Вообще верное замечание [3] по поводу записи лога в данном событии.... Оно точно не для этого...

А вот Done нужно False ставить, чтоб данное событие не переставало генерироваться....


 
SkyN   (2009-04-08 15:44) [10]

мне не надо чтобы событие было в цикле, т.е. Done я регулярно ставлю в True. Но я хочу, чтобы каждый раз, когда пользователь поменял настройки, произошло событие от таймера, пришли данные по DDE, моё приложение отреагировало на любое событие windows, в любом из этих случаев последним действием (т.е. очередь событий пуста) вызвался бы мой код.

но если пришло много данных по DDE, то мой код должен вызваться только один раз.


 
Sapersky   (2009-04-08 16:16) [11]

ИМХО, проще и надёжнее выставлять какой-то флаг и проверять его в таймере.
OnIdle с Done = True предназначено, как мне кажется, в основном для определения момента завершения пользовательского ввода. При этом можно выполнить некие "отложенные" второстепенные действия, которые нежелательно вешать на события контролов во избежание заметных тормозов (например, действие продолжительностью 100-200 мс в OnMouseMove). Ещё можно (и даже лучше) вынести эти действия в отдельный поток, но это требует синхронизации; OnIdle в этом смысле проще.


 
Сергей М. ©   (2009-04-08 23:00) [12]


> хочу, чтобы каждый раз, когда пользователь поменял настройки,
>  произошло событие от таймера,


Можно подумать, что какой-то там бедняга-пользователь, "меняющий настройки", обязан "по твоему хотенью" знать о каком-то там "таймере"..


 
Германн ©   (2009-04-09 00:23) [13]


> Сергей М. ©   (08.04.09 23:00) [12]
>
>
> > хочу, чтобы каждый раз, когда пользователь поменял настройки,
>
> >  произошло событие от таймера,
>
>
> Можно подумать, что какой-то там бедняга-пользователь, "меняющий
> настройки", обязан "по твоему хотенью" знать о каком-то
> там "таймере"..
>

Неверно прочитал. Там не было никакой причинно-следственной связи между сменой настроек и событиями таймера.

P.S.
Но сама задача мне плохо ясна.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.009 c
15-1237378003
Styx_
2009-03-18 15:06
2009.05.24
Шестнадцатиричные числительные


15-1237757405
Юрий
2009-03-23 00:30
2009.05.24
С днем рождения ! 23 марта 2009 понедельник


2-1239122277
Drowsy
2009-04-07 20:37
2009.05.24
Как "передать управление клавиатурой" компоненту типа TPanel?


15-1236782150
Urk
2009-03-11 17:35
2009.05.24
Когда выйдет Update 3 для Delphi 2009?


3-1221048997
Drowsy
2008-09-10 16:16
2009.05.24
Как в ХП передать вводимую строку из DBGrid-а?




   Наверх