Что нового

[Время, дата] _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,724
Что вы подразумеваете под суммарным временем бездействия? Функция _Timer_GetIdleTime() возвращает время, прошедшее с момента последнего события. Если проссумировать все эти значения за определенный промежуток времени, то полученное значение будет в точности равно этому отрезку времени. Другими словами, вы не можете таким образом определить сколько времени компьютер провел в бездействии за определенный промежуток времени.
 

Yashied

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

Idle.png

Все, что выше черты (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
 
Верх