Zeit berechnung für download

  • Hi hab wieder mal ein Problem :pinch:

    will so ein download Programm schreiben
    und wollt dabei die zeit für den Download
    aus rechnen
    (Meine Frage wie das funktioniert)

    Vielen dank für eure hilfe :thumbup:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Timers.au3>
    DirCreate(@ScriptDir & "\Downloads")

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

    $download=InetGet("http://www.foxload.com/files/firefox/yahoo_firefox_5.0_setup_de-foxload.exe",@ScriptDir & "\Downloads\test_ubuntu.iso",1,1) ;der download
    $gui=GUICreate("Test",1020,80)
    $progressbar=GUICtrlCreateProgress(10,30,1000,20)
    $kb_and_procent_label = GuiCtrlCreateLabel("0 kb von 0 kb; 0 % von 100 %" ,10 ,60 ,1000 ,20)
    $time_label=GUICtrlCreateLabel("Geschätzte Zeit: ---Wird Berechnet---" ,10 ,10 ,1000 ,20)

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

    GUISetState() ;Gui Erstellung

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

    While 1

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

    $msg=GUIGetMsg()

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

    GUICtrlSetData($progressbar, int((InetGetInfo($download,0)/InetGetInfo($download,1))*100)) ;aktualiesierung des Progresses
    GUICtrlSetData($kb_and_procent_label ,int(InetGetInfo($download,0)/1024) & " kb von " & int( _
    InetGetInfo($download,1)/1024)&" kb; "&int((InetGetInfo($download,0)/InetGetInfo($download,1))*100)&" % von 100 %") ;aktualiesierung des $$kb_and_procent_labels

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

    If $msg = $GUI_EVENT_CLOSE Then Exit

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

    WEnd

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

    Func _time()

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

    ;hier soll die Verbleibende Zeit berechnet werden
    ;und über GuiCtrlSetData des $time_label aktualiesiert werden

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

    EndFunc

    [/autoit]


    Und auserdem stört mi des flackern von dem label
    kann ma da was da gegen machen ?(

    Wer noch verbesserungs vorschläge hatt immer raus damit :D

    3 Mal editiert, zuletzt von AutoItfreak (12. September 2011 um 11:46)

  • Im comment steht ja:

    [autoit]

    ;hier soll die Verbleibende Zeit berechnet werden
    ;und über GuiCtrlSetData des $time_label aktualiesiert werden

    [/autoit]

    Ist an sich ja keine Frage aber man sollte doch aus dem kontext heraus schliessen können, was er will ^^

    Bild1: Ich beim debuggen

  • Morgen,

    also für das Flackern würde ich das ganze einfach etwas "langsamer" machen.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Timers.au3>

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

    DirCreate(@ScriptDir & "\Downloads")
    AdlibRegister("_setprogress")

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

    $download=InetGet("http://www.foxload.com/files/firefox/yahoo_firefox_5.0_setup_de-foxload.exe",@ScriptDir & "\Downloads\test_ubuntu.iso",1,1) ;der download
    $GUI=GUICreate("Test",1020,80)
    $progressbar=GUICtrlCreateProgress(10,30,1000,20)
    $kb_and_procent_label = GuiCtrlCreateLabel("0 kb von 0 kb; 0 % von 100 %" ,10 ,60 ,1000 ,20)
    $time_label=GUICtrlCreateLabel("Geschätzte Zeit: ---Wird Berechnet---" ,10 ,10 ,1000 ,20)
    GUISetState(@SW_SHOW,$GUI) ;Gui Erstellung

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

    While 1
    $msg=GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd

    Func _time()
    ;hier soll die Verbleibende Zeit berechnet werden
    ;und über GuiCtrlSetData des $time_label aktualiesiert werden
    EndFunc
    Func _setprogress()
    GUICtrlSetData($progressbar, int((InetGetInfo($download,0)/InetGetInfo($download,1))*100)) ;aktualiesierung des Progresses
    GUICtrlSetData($kb_and_procent_label ,int(InetGetInfo($download,0)/1024) & " kb von " & int( _
    InetGetInfo($download,1)/1024)&" kb; "&int((InetGetInfo($download,0)/InetGetInfo($download,1))*100)&" % von 100 %") ;aktualiesierung des $$kb_and_procent_labels
    EndFunc
    Func _exit()
    Exit
    ; eventuell Daten speichern für Download wieder aufnehmen usw..
    EndFunc

    [/autoit]


    Gruß Marvin

  • Wenn du von einer durchschnittlichen Geschwindigkeit ohne große Schwankungen ausgehst dann kannst du die verbleibende Zeit aus dem Verhältnis der bisher verbrauchten Zeit und dem derzeitigen Downloadstand in Prozent ermitteln.
    Mal ein rudimentäres Beispiel welches nur funktioniert wenn der Server auch eine Gesamtgröße sendet:

    Spoiler anzeigen
    [autoit]

    DirCreate(@ScriptDir & "\Downloads")
    DownAFile("http://www.ubuntu.com/start-download?distro=desktop&bits=32&release=latest", @ScriptDir & "\Downloads\test_ubuntu.iso")

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

    Func DownAFile(Const $s_URL, Const $s_Target)
    Local $a_InetInfo, $i_TimeElapsed
    Local $i_FullSize = InetGetSize($s_URL, 1) ; klappt nicht immer - dann funktioniert auch keine weitere Berechnung

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

    Local $h_gui = GUICreate($s_URL, 1020, 80)
    Local $g_progress = GUICtrlCreateProgress(10, 30, 1000, 20)
    Local $g_kb_przt_label = GUICtrlCreateLabel("0 kb von 0 kb; 0 %", 10, 60, 1000, 20)
    Local $g_time_label = GUICtrlCreateLabel("Zeit bisher: ", 10, 10, 1000, 20)

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

    Local $h_INet = InetGet($s_URL, $s_Target, 1, 1)
    Local $i_StartTime = TimerInit()

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

    GUISetState(@SW_SHOW, $h_gui)

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

    Do
    $a_InetInfo = InetGetInfo($h_INet)
    $i_Percent = 100 * $a_InetInfo[0] / $i_FullSize
    $i_TimeElapsed = TimerDiff($i_StartTime) / 1000

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

    GUICtrlSetData($g_progress, $i_Percent)
    GUICtrlSetData($g_kb_przt_label, StringFormat("%7d kb von %7d kb; %6.1f kb/s; %5.1f %%", $a_InetInfo[0] / 1024, _
    $i_FullSize / 1024, _
    ($a_InetInfo[0] / 1024) / $i_TimeElapsed, _ ;durchschnittliche kb/s
    Round($i_Percent, 1)))

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

    GUICtrlSetData($g_time_label, StringFormat("Zeit bisher: %5d s; Vermutlich verbleibende Zeit: %5d s", Round($i_TimeElapsed), _
    Round((-1 + 100 / $i_Percent) * $i_TimeElapsed)))

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

    Sleep(100)
    Until $a_InetInfo[2]

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

    GUIDelete($h_gui)
    Return SetError($a_InetInfo[4], 0, $a_InetInfo[3])
    EndFunc

    [/autoit]
  • Das geht nur wenn es der Server von den es runter lädst unterstützt.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Vielen Dank für eure Hilfe
    jetzt hab is
    schnell zam geschrieben
    und so siehts aus:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Timers.au3>

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

    DirCreate(@ScriptDir & "\Downloads")
    AdlibRegister ( "_Progress" , 500 )
    AdlibRegister ( "_time" , 500 )

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

    $download=InetGet("http://www.foxload.com/files/firefox/yahoo_firefox_5.0_setup_de-foxload.exe",@ScriptDir & "\Downloads\test_firefox.exe",1,1) ;der download
    $gui=GUICreate("Test",1020,80)
    $progressbar=GUICtrlCreateProgress(10,30,1000,20)
    $kb_and_procent_label = GuiCtrlCreateLabel("0 kb von 0 kb; 0 % von 100 %" ,10 ,60 ,1000 ,20)
    $time_label=GUICtrlCreateLabel("Verbleibende Zeit: ---Wird Berechnet--- ;Geschwindigkeit: ---Wird Berechnet---" ,10 ,10 ,1000 ,20)
    $timer = 0
    $timer_start = False

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

    GUISetState() ;Gui Erstellung

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

    While 1

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

    $msg=GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then Exit

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

    WEnd

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

    Func _time()

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

    If InetGetInfo($download, 2) = False Then

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

    If InetGetInfo($download,0) > 0 And $timer_start = False Then
    $timer = TimerInit()
    $timer_start = True
    EndIf

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

    $time_calc = int((int(InetGetInfo($download,1)/1024)-(InetGetInfo($download,0)/1024)) _
    /int((InetGetInfo($download,0) / 1024) / (TimerDiff($timer) / 1000)))

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

    $Geschwindigkeit_calc = int(InetGetInfo($download,0) / (TimerDiff($timer) / 1000))

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

    If $time_calc <= 60 Then

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

    If $time_calc = 1 Then
    $time = " 1 Sekunde"
    Else
    $time = $time_calc & " Sekunden"
    EndIf

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

    EndIf

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

    If $time_calc > 60 Then

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

    If int($time_calc/60) = 1 Then
    $time = " 1 Minute"
    Else
    $time = int($time_calc/60) & " Minuten"
    EndIf

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

    EndIf

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

    If $time_calc/60 > 60 Then

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

    If int(($time_calc/60)/60) = 1 Then
    $time = " 1 Tag"
    Else
    $time = int(($time_calc/60)/60) & " Tage"
    EndIf

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

    EndIf

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

    If int($Geschwindigkeit_calc) <= 1024 Then

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

    $Geschwindigkeit = int($Geschwindigkeit_calc) & " Byte/Sekunde"

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

    EndIf

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

    If int($Geschwindigkeit_calc) > 1024 Then

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

    $Geschwindigkeit = int($Geschwindigkeit_calc/1024) & " Kilobyte/Sekunde"

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

    EndIf

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

    If int($Geschwindigkeit_calc/1024) > 1024 Then

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

    $Geschwindigkeit = int(($Geschwindigkeit_calc/1024)/1024) & " Megabyte/Sekunde"

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

    EndIf

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

    If int(($Geschwindigkeit_calc/1024)/1024) > 1024 Then

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

    $Geschwindigkeit = int((($Geschwindigkeit_calc/1024)/1024)/1024) & " Gigabyte/Sekunde"

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

    EndIf

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

    GUICtrlSetData($time_label, "Verbleibende Zeit: " & $time & "; Geschwindigkeit: " & $Geschwindigkeit)

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

    Else
    GUICtrlSetData($time_label, "Verbleibende Zeit: 0 Sekunden ;Geschwindigkeit: 0 Kilobytes/Sekunde")
    Exit
    EndIf

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

    EndFunc

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

    Func _Progress()

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

    GUICtrlSetData($progressbar, int((InetGetInfo($download,0)/InetGetInfo($download,1))*100)) ;aktualiesierung des Progresses
    GUICtrlSetData($kb_and_procent_label ,int(InetGetInfo($download,0)/1024) & " kb von " & int( _
    InetGetInfo($download,1)/1024)&" kb; "&int((InetGetInfo($download,0)/InetGetInfo($download,1))*100)&" % von 100 %") ;aktualiesierung des $$kb_and_procent_labels

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

    EndFunc

    [/autoit]