Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось amel27, 13-06-2007 в 12:39.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:18, 13-06-2007 | #16