Geschwindigkeit Regulieren

  • Hi,

    mit der Anregung von diesem Thread habe ich eine kleine UDF erstellt um Geschwindigkeit von Down oder Uploads zu regulieren.

    Die UDF

    Spoiler anzeigen
    [autoit]


    Global $__SpeedCtrl_Timer = 0
    Global $__SpeedCtrl_SleepTime = 0
    Global $__SpeedCtrl_Speed = 0

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _SpeedCtrl_Start()
    ; Description ...: Initialisiert die Bandbreitenbeschränkung
    ; Syntax ........: _SpeedCtrl_Start($iSpeed)
    ; Parameters ....: $iSpeed - Speed in Kb/s
    ; Return values .: Failure: -1
    ; Author ........: Sprenger120
    ; =================================================================================================

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

    Func _SpeedCtrl_Start($iSpeed)
    If $__SpeedCtrl_Timer <> 0 Then Return SetError(1, 0, -1)
    $__SpeedCtrl_Timer = TimerInit()
    $__SpeedCtrl_SleepTime = 0
    $__SpeedCtrl_Speed = $iSpeed
    EndFunc

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _SpeedCtrl_Regulate()
    ; Description ...: Reguliert die Bandbreite der Aktion
    ; Syntax ........: _SpeedCtrl_Regulate($sAkPos)
    ; Parameters ....: $sAkPos - Aktueller Fortschritt (in Bytes)
    ; Return values .: Success: Aktueller Speed in Kb/s
    ; Failure: -1
    ; Author ........: Sprenger120
    ; =================================================================================================

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

    Func _SpeedCtrl_Regulate($sAkPos)
    If Not IsInt($sAkPos) Then Return SetError(1, 0, -1)
    $_Fort = Int(($sAkPos / (TimerDiff($__SpeedCtrl_Timer) / 1000)) / 1024)

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

    If $_Fort < $__SpeedCtrl_Speed Then ; Zu kleiner Speed
    $__SpeedCtrl_SleepTime -= 5
    ElseIf $_Fort > $__SpeedCtrl_Speed Then ; Zu großer Speed
    $__SpeedCtrl_SleepTime += 5
    EndIf

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

    Sleep($__SpeedCtrl_SleepTime)

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

    If $__SpeedCtrl_SleepTime < 0 Then $__SpeedCtrl_SleepTime = 0
    Return $_Fort
    EndFunc

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _SpeedCtrl_Clear()
    ; Description ...: Leer die benutzten Ressourcen
    ; Syntax ........: _SpeedCtrl_Clear()
    ; Author ........: Sprenger120
    ; =================================================================================================

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

    Func _SpeedCtrl_Clear()
    $__SpeedCtrl_Timer = 0
    $__SpeedCtrl_SleepTime = 0
    $__SpeedCtrl_Speed = 0
    EndFunc

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _SpeedCtrl_SetSpeed()
    ; Description ...: Setzt die Maximale Bandbreite der Aktion
    ; Syntax ........: _SpeedCtrl_SetSpeed($iSpeed)
    ; Parameters ....: $iSpeed - Speed in Kb/s
    ; Author ........: Sprenger120
    ; =================================================================================================

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

    Func _SpeedCtrl_SetSpeed($iSpeed)
    $__SpeedCtrl_Speed = $iSpeed
    EndFunc

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

    Ein Beispiel (Bitte $sPath anpassen)

    Spoiler anzeigen
    [autoit]


    #include "SpeedRegu.au3"
    $sPath = @ScriptDir & "\CCC.mpg" ; Bitte anpassen

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

    $hFile = FileOpen($sPath, 16)
    $hDest = FileOpen(@ScriptDir & "\CCC_1.mpg", 1)

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

    _SpeedCtrl_Start(500)
    $x = 0
    While 1
    $read = FileRead($hFile, 1024)
    If @error Then ExitLoop
    $tmp = _SpeedCtrl_Regulate(FileGetPos($hFile))
    If $x = 10 Then
    ConsoleWrite($tmp & @CRLF)
    $x = 0
    Else
    $x += 1
    EndIf

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

    FileWrite($hDest, $read)
    WEnd

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

    FileClose($hDest)
    FileClose($hFile)

    [/autoit]