Что нового

[Время, дата] _Timer_GetIdleTime не могу получить суммарное время бездействия

avastov

Новичок
Сообщения
2
Репутация
0
Здравствйте.
Знаю, что туплю, но тем не менее: не могу получить суммарное время бездействия. Хоть с функцией _Timer_GetIdleTime, хоть с _WinAPI_GetIdleTime() :'(
Код:
#include <Timers.au3>
HotKeySet("^k", "_Quit")
$starttime = _Timer_Init()
$IdleTime=0
While 1
        $iTimeDiff =_Timer_Diff($starttime)
		$IdleTime=$IdleTime+_Timer_GetIdleTime()
		 ToolTip("Суммарное время бездействия-"&Round ($IdleTime/1000,1)&@Lf&"Общее время="&Round ($iTimeDiff/1000,1))	 
   	  Sleep (100)
WEnd
Func _Quit()
	Exit
EndFunc

Ткните носом, как правильно суммировать?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 714
Что вы подразумеваете под суммарным временем бездействия? Функция _Timer_GetIdleTime() возвращает время, прошедшее с момента последнего события. Если проссумировать все эти значения за определенный промежуток времени, то полученное значение будет в точности равно этому отрезку времени. Другими словами, вы не можете таким образом определить сколько времени компьютер провел в бездействии за определенный промежуток времени.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 714
Если вы хотите получить некое аппроксимированное значение КПД, то нужно подобрать некий критерий, по которому определять бездействие компьютера. Например считать, что компьютер используется, если каждые 100 мс происходят какие-нибудь события (клавиатура/мышь). Все, что выходит за пределы 100 мс относить к бездействию. Диаграмма, выдаваемая функцией _Timer_GetIdleTime(), будет примерно такая:


Все, что выше черты (100 мс), принимаем за бездействие (красный цвет). Зеленым цветом обозначена активная работа. Суммировать нужно не все красные отрезки, а только пиковые (последние поученные значения перед сбросом). Тогда можно написать так:

Код:
#Include <Timers.au3>

HotKeySet('^k', '_Quit')

$Timer = TimerInit()
$Delta = 100
$Prev = 0
$Idle = 0

While 1
	$Time = _Timer_GetIdleTime()
	If ($Time > $Prev) And ($Time > $Delta) Then
		If $Prev < $Delta Then
			$Idle += $Time - $Delta
		Else
			$Idle += $Time - $Prev
		EndIf
	EndIf
	$Prev = $Time
	ToolTip('Суммарное время бездействия = ' & Round($Idle / 1000, 1) & @CR & 'Общее время = ' & Round(TimerDiff($Timer) / 1000, 1))
	Sleep(10)
WEnd

Func _Quit()
	Exit
EndFunc   ;==>_Quit
 
Автор
A

avastov

Новичок
Сообщения
2
Репутация
0
Yashied, спасибо :smile:. Как всегда :ok:.
 
Верх