Verarbeitungsgeschwindigkeit in kB/s - (Verbesserungsvorschläge?)

  • Hi,
    ich möchte die Verarbeitungsgeschwindigkeit von einem Prozess anzeigen lassen.
    Die einzige Möglichkeit um an den Fortschritt zu kommen, ist die entstehende Datei sekündlich auszulesen.

    Dieses Script habe ich schon zusammengebastelt und es funktioniert auch...
    Nur würde es mich sehr interessieren, wie und wo man es noch verbessern könnte.

    Spoiler anzeigen
    [autoit]


    $file = "test.tar"
    ;~ Wenn ihr es testen wollt, könnt ihr z.B. kurz an einer Linux-Distro nuckeln:
    ;~ http://ftp-stud.hs-esslingen.de/pub/Mirrors/re…esktop-i386.iso

    [/autoit] [autoit][/autoit] [autoit]

    $size1 = 0
    $size2 = 0
    $speed = 0
    $i = 1

    [/autoit] [autoit][/autoit] [autoit]

    While 1

    [/autoit] [autoit][/autoit] [autoit]

    If FileExists ($file) Then
    If $i = 1 Then ;~ erster, dritter, fünfter usw... Durchlauf.
    $i = 2
    $size1 = FileGetSize($file) / 1024 ;~ prüft nur die Größe von $size1

    ElseIf $i = 2 then ;~ zweiter, vierter, sechster usw... Durchlauf.
    $i = 1
    $size2 = FileGetSize($file) / 1024 ;~ prüft die Größe von $size2
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $size1 >= $size2 Then ;~ berechnet den Größenunterschied pro Sekunde.
    $size = $size1 - $size2 ;~ also die Geschwindigkeit in kB/s.
    $speed = Round($size)
    ElseIf $size2 > $size1 Then
    $size = $size2 - $size1
    $speed = Round($size)
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ToolTip($speed & " kB/s", 0, 0)
    Sleep(1000)

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit]

    Gruß
    Manta

    3 Mal editiert, zuletzt von Manta (11. Januar 2011 um 21:13)

  • Aufjedenfall kannst du deinen Sleep befehl gegen einen Timer tauschen. Dann kann dein Programm auch noch was anderes machen.

    Ansonsten finde ichs ganz gut. Aber ich bin bei weitem kein Profi.

    Gruß Daniel

    • Offizieller Beitrag

    Ich würde es eher mit AdlibRegister erledigen (ungetestet, da InetGet während des downloadens die FileSize nicht aktualisiert):

    Spoiler anzeigen
    [autoit]


    HotKeySet('{ESC}', '_End')

    [/autoit] [autoit][/autoit] [autoit]

    Global $sFile = @ScriptDir & '\test.iso'

    [/autoit] [autoit][/autoit] [autoit]

    Global $iOldSize
    AdlibRegister('_CalcSpeed', 1000)

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _End()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _CalcSpeed()
    Local $iSize, $iSpeed
    $iSize = FileGetSize($sFile)
    If $iSize <> $iOldSize Then
    $iSpeed = ($iSize - $iOldSize) / 1024
    ToolTip($iSpeed & " kB/s", 0, 0)
    $iOldSize = $iSize
    EndIf
    EndFunc

    [/autoit]
  • Dankeschön, ist echt super sauber.
    Wieder was gelernt :)

    Nur habe ich diese If-Schleife entfernt:

    [autoit]

    If $iSize <> $iOldSize Then

    [/autoit]


    Damit gabs oft unrealistische Ausreißer, die um ein zehnfaches zu hoch waren.