Форум: "Основная";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c