Hallo,
ich habe mir ein kleinen downloader gebastelt. Er zeit bis jetzt den Vortschrit an. Jetzt würde ich gerne auch eine Downloadgeschwindkeit einbauen.
Leider habe ich kein Tutorial oder Beitrag gefunden der erklärt wie bei InetGetInfo die Funktionen zusammenspielen, sondern einfach nur der Code hingeklatscht
Könnte mir einer erklären wie ich die Downloadgeschwindigkeit berechnen kann?
mfg Freaky
Downloadgeschwindigkeit berechnen
-
- [ gelöst ]
-
Freaky -
14. Juli 2011 um 22:43 -
Geschlossen -
Erledigt
-
-
Ich kann dir höchstens noch mehr Code hinklatschen, aber das Grundprinzip ist einfach. Genaue Erklärung, siehe hier.
*hinklatsch*
[autoit]#include <Date.au3>
[/autoit] [autoit][/autoit] [autoit]; - Author: name22(http://www.autoit.de)
[/autoit] [autoit][/autoit] [autoit]Global $sURL = "http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3-setup.exe"
[/autoit] [autoit][/autoit] [autoit]Global $iSizeBytes = InetGetSize($sURL)
[/autoit] [autoit][/autoit] [autoit]
Global $hDownload = InetGet($sURL, StringTrimLeft($sURL, StringInStr($sURL, "/", 0, -1)), 0, 1)
Global $iH, $iM, $iS, $nT = TimerInit()ProgressOn("Download", "0% Completed - 0 bps", "ETA: 00:00:00", Default, Default, 18)
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
$iCompletedBytes = InetGetInfo($hDownload, 0)
$nPercent = $iCompletedBytes * 100 / $iSizeBytes
$nElapsedTime = TimerDiff($nT)$nBPS = $iCompletedBytes / ($nElapsedTime / 1000)
[/autoit] [autoit][/autoit] [autoit]
_TicksToTime($iSizeBytes / $nBPS, $iH, $iM, $iS)ProgressSet($nPercent, "ETA: " & StringFormat("%02d:%02d:%02d", $iH, $iM, $iS), Round($nPercent, 1) & "% Completed - " & Int($nBPS) & " bps")
[/autoit] [autoit][/autoit] [autoit]Sleep(50)
[/autoit] [autoit][/autoit] [autoit]
Until InetGetInfo($hDownload, 2)ProgressSet(100, "", "Download completed.")
[/autoit]
Sleep(500)
ProgressOff()
MsgBox(64, "Info", "Download completed.") -
Hey,
danke. Der Code ist wenigstens leichter zu verstehen als der von AutoBert den ich gefunden habe.
Mit bps ist doch Bytes per second bemeint oder? (Jaja mein Englisch :D)
Wenn ich dies in KB haben möchte. muss ich * oder / durch 1024 rechnen? -
Erst mit
[autoit]InetGetSize
[/autoit]
[autoit]
die gesamtgröße ermitteln und dann währenddessen mitInetGetInfo($dl, 0) / 1024 / 1024
[/autoit]
weißt du wieviel MB bereits geladen wurden.Anhand dieser 2 Werte kannst du berechnen wieviel kb/sekunde heruntergeladen werden.
Um einen möglichst genauen, wenig schwankenden Wert zu bekommen solltest du aus allen Werten die du bekommst den Durchschnitt bilden und anzeigen.Edit: name22 war schneller du sau
um von Bytes auf Kilobytes zu kommen musst du / 1024