Creat0R
Цитата:
а что если в скрипте уже используется Adlib для других целей?
|
использовать самопальный AdLib
тем более, что у него нет ограничений на количество запусков...
Цитата:
на выходе из цикла переменная $AverageSpeed будет содержать общую среднюю скорость закачки на промежуток времени всей закачки, или она будет содержать последнюю засеченную среднюю скорость (на выходе из цикла)?
|
среднюю по закаченной части файла, соответственно на выходе - по всему файлу... вообще если нужен только итог, то достаточно по завершению разделить
FileGetSize() на
TimerDiff().
Цитата:
А что если в Adlib я поставлю не 1000, а 500, чтобы данные обновлялись более часто? если это нарушает достоверность данных, то как сделать отображение чаще чем раз в секунду, но при этом сохранить достоверность (надёжность) данных о скорости?
|
придется хранить все предыдущие значения
@InetGetBytesRead, например в массиве... Вот измененный вариант, где скорость измеряется за последние 500*10 = 5 сек закачки:
Код:
Global $AdLibMS=500, $InetBytesBack = 10
Global $InetSpeed = 0, $InetTimeStamp
Global $InetBytesRead[$InetBytesBack+1]
AdlibEnable ("_InetGetSpeed", $AdLibMS)
InetGet("http://downloadmirror.intel.com/6667/eng/ISM556_Build7.exe", "test.exe", 1, 1)
While @InetGetActive
Sleep(100)
$bytes = StringFormat('Downloads: %d Kb',@InetGetBytesRead/1000)
$speed = StringFormat('Speed: %d Kb/Sec',$InetSpeed)
TrayTip('', $bytes & @CRLF & $speed, 10, 16)
Wend
Func _InetGetSpeed()
Local $nb ; Значение массива по текущему индексу до его обновления (цикл назад)
If @InetGetActive Then
; Если первый раз, то инициализируем массив
If $InetBytesRead[0]=0 Then $InetBytesRead[0] = 1
; Ищем следущую ячейку массива
$InetBytesRead[0]+=1
If $InetBytesRead[0] > $InetBytesBack Then $InetBytesRead[0]=1
; Сохраняем значение массива в переменной (сколько было байт 1 цикл назад)
$nb = $InetBytesRead[$InetBytesRead[0]]
; Записываем новое значение загруженных байт
$InetBytesRead[$InetBytesRead[0]] = @InetGetBytesRead
; Выбираем формулу в зависимости от того проходим первый цикл или уже нет
If $nb >0 Then
$InetSpeed = ($InetBytesRead[$InetBytesRead[0]]-$nb)/($AdLibMS * $InetBytesBack)
Else
$InetSpeed = $InetBytesRead[$InetBytesRead[0]]/($AdLibMS * $InetBytesRead[0])
EndIf
Else
; Если нет закачки затираем массив и сбрасываем параметры
If $InetBytesRead[0]>0 Then Global $InetBytesRead[$InetBytesBack+1]
$InetSpeed = 0
EndIf
EndFunc