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

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

Аватара для Creat0R

Must AutoIt


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

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


amel27
Цитата:
вообще если нужен только итог, то достаточно по завершению разделить FileGetSize() на TimerDiff()
Гинеально!!! оказалось намного проще! спасибо.

Цитата:
придется хранить все предыдущие значения @InetGetBytesRead, например в массиве
А что если объявлять локально переменные которые не изменяются нигде, это повлияет на результаты?

Вот как я сделал:

Код: Выделить весь код
Global $InetBytesRead[10+1]

InetGet("http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3.2.4.4-setup.exe", "test.exe", 1, 1)

$begin = TimerInit()

While @InetGetActive
    Sleep(100)
    $InetSpeed = _InetGetSpeed(100)
    $bytes = StringFormat('Downloads: %d Kb',@InetGetBytesRead/1024)
    $speed = StringFormat('Speed: %d Kb/Sec',$InetSpeed)
    TrayTip('', $bytes & @CRLF & $speed, 10, 16)
Wend

MsgBox (64,'', "Download is finished with Avarage Speed of: " & Int(FileGetSize("test.exe")/TimerDiff($begin)) & " kb/s")

Func _InetGetSpeed($AdLibMS=500)
    Local $nb ; Значение массива по текущему индексу до его обновления (цикл назад)
    Local $InetSpeed = 0, $InetBytesBack = 10
    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
    Return $InetSpeed
EndFunc
Ну не очень мне нравится идея с Adlib в этом случае

Кстати, у тебя в примере чтобы получить кб, байты деляться на 1000:

Код: Выделить весь код
@InetGetBytesRead/1000
Разве не на 1024 нужно делить?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 22:20, 13-06-2007 | #19