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

Application.OnIdle - есть проблемка   Найти похожие ветки 

← →
Vovaka   (2002-11-14 13:37) [0]

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

procedure TMainForm.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
Timer2.Enabled := false;
Timer2.Enabled := true;
Done := true;
end;

на таймере должно что-то произойти

если пользователь что-то делает, то таймер отключается

procedure TMainForm.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
case Msg.message of
WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN:
begin
Timer2.Enabled := false;
Handled := false;
end;
end;
end;

но вся загвоздка в том, что надо как-то отследить, что не только пользователь ничего не делает, но и само приложение не выполняет никаких задач. Если в первой процедуре убрать строчку Timer2.Enabled := false; - то таймер сработает в независимости от того, что приложение что-то делает без пользователя, если оставить эту строчку - таймер никогда не сработает, потому как событие OnIdle постоянно вызывается даже когда ничего не делается, корректно работает только когда активным становится другое приложение. Как выйти из ситуации не пойму.


← →
Marcus   (2002-11-14 13:44) [1]

А зачем тебе OnIdle? Включай таймер в ApplicationEvents1Message после обработки сообщения.

Timer2.Enabled := false;
Handled := false;
Timer2.Enabled := true;

Тебе же нужно отслеживать интервал бездействия от последнего сообщения, если я правильно понял. Вот таймер и будет сбрасываться на каждое движение юзера


← →
Alx2 ©   (2002-11-14 13:48) [2]

>Vovaka (14.11.02 13:37)
>но вся загвоздка в том, что надо как-то отследить, что не
>только пользователь ничего не делает, но и само приложение не
>выполняет никаких задач.
IMHO все уже сделано в

BOOL GetThreadTimes(

HANDLE hThread, // specifies the thread of interest
LPFILETIME lpCreationTime, // when the thread was created
LPFILETIME lpExitTime, // when the thread was destroyed
LPFILETIME lpKernelTime, // time the thread has spent in kernel mode - "бездействие в ожидании процессора"
LPFILETIME lpUserTime // time the thread has spent in user mode - "работа"
);


Parameters

hThread

An open handle that specifies the thread whose timing information is sought. This handle must be created with THREAD_QUERY_INFORMATION access. For more information, see Thread Objects.

lpCreationTime

Points to a FILETIME structure that receives the creation time of the thread.

lpExitTime

Points to a FILETIME structure that receives the exit time of the thread. If the thread has not exited, the content of this structure is undefined.

lpKernelTime

Points to a FILETIME structure that receives the amount of time that the thread has executed in kernel mode.

lpUserTime

Points to a FILETIME structure that receives the amount of time that the thread has executed in user mode.


← →
Vovaka   (2002-11-14 13:52) [3]

А как в этом случае отследить выполнение приложением каких-либо функций без участия юзера ?


← →
Vovaka   (2002-11-14 13:53) [4]

Это относилось к предыдущему ответу


← →
Alx2 ©   (2002-11-14 13:55) [5]

>Vovaka (14.11.02 13:52)
>без участия юзера
Скажи что понимать под "участием юзера"


← →
Vovaka   (2002-11-14 13:57) [6]

Это к предыдущему ответу относилось


← →
Alx2 ©   (2002-11-14 14:00) [7]

>Vovaka (14.11.02 13:57)
совсем запутал. Целая теория относительности :))

А мой пост - не то?


← →
Vovaka   (2002-11-14 14:06) [8]

Не-а, над твоим как раз размышляю, пока писАл тот ответ Marcus"у твой пост вклинился, получилось буд-то бы тебе ответил. Не очень удобная структура здесь, все в перемешку...


← →
Vovaka   (2002-11-14 14:09) [9]

Облом, только под NT работает :(


← →
Alx2 ©   (2002-11-14 14:17) [10]

>Vovaka (14.11.02 14:09)
У тебя вопрос был по D6 и W2k.


← →
Vovaka   (2002-11-14 14:24) [11]

Да..., пишу на них, но работать должно везде...



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

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



Память: 0.47 MB
Время: 0.013 c
14-82953
blackman
2002-10-19 17:55
2002.11.25
Как у нас погодой ?


6-82894
Serg T
2002-09-21 22:27
2002.11.25
Как скачать URL


7-83029
goldzoloto
2002-09-21 13:58
2002.11.25
КАК ВКЛУЧИТЬ КОМП ПО СЕТЕВОЙ КАРТЕ


1-82724
Саша
2002-11-14 13:02
2002.11.25
Функция типа ping а


3-82586
Maloi
2002-11-07 22:25
2002.11.25
Помогите! Как отловить ID только что добавленной записи?




   Наверх