Script zu uhrzeit X beenden

  • Moin,
    ich habe ein Skript. Oh Wunder :D In diesem Skript ist eine For-Schleife eingebaut die eine Auswertung von verschiedenen Dateien auf verschiedenen PC's vornimmt. Laufzeit dieser Schleife liegt bei ca. 12-14 Minuten. Nun sollte dieses Skript die For-Schleife unendlich wiederholen. kein Problem, löse ich mit einer While-Schleife. Allerdings soll die While-Schleife zu Uhrzeit X beendet werden. Ich bin mir nicher, ob ich es sauberer lösen kann als so:

    [autoit]

    while 1
    $zeit = @hour & ":" & @MIN
    if $zeit = "09:00" then ExitLoop
    WEnd

    [/autoit]


    Das könnte ich zu Anfang jedes Schleifenvorganges abfragen lassen (Eine Auswertung dauert ca. 15 - 20 Sekunden). Hätte ich jetzt aber eine Auswertung die pro Schleifenvorgang meinetwegen 5 Minuten dauern würde kann ich nicht sagen "los, skript soll um 9:00 Uhr beendet werden... Welche anderen Lösungen gibt es da noch?

    Einmal editiert, zuletzt von Scritch (13. Dezember 2011 um 08:14)

  • Du kannst prüfen, ob die Zeit größer ist, also z.B:

    [autoit]

    while 1
    if @HOUR > 9 AND @MIN > 0 then ExitLoop
    WEnd

    [/autoit]


    Das Script läuft dann maximal noch einmal durch, danach hört es aber auf

  • Wie Scritch geschrieben hat, was machst du wenn ein Durchlauf 5 Minuten dauert und der um 03:44 einen Durchlauf startet?

    [autoit]


    $Wday = @WDAY
    $day = 0
    If @HOUR > 9 AND @MIN > 0 Then
    $day = 1
    EndIF

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

    while 1
    If $day = 0 Then
    if @HOUR > 9 AND @MIN > 0 then ExitLoop
    Else
    If @WDAY <> $Wday AND @HOUR > 9 AND @MIN > 0 then ExitLoop
    EndIf
    WEnd

    [/autoit]

  • Ähnlich löse ich es ja bisher, was mir aber zu unkomfortable ist. Ich lasse das Skript mit einem geplanten Task starten, meinetwegen um 5 Uhr nachts, und es soll um 9: Uhr aufhören zu laufen. Da muss man sich ja immer von der Startzeit bis zu der Endzeit die Zeit ausrechnen, wie lange das Skript laufen darf um es dann zu beenden. Ich denke die Möglichkeit von LuBu ist das optimalste für mich. Danke euch! :)

  • Ich weiß das Script ist bereits gelöst, jedoch würde ich meine Meinung auch ganz gerne äußern :
    Ich bevorzuge es, einen Timer aus dem Spiel zu lassen,
    so sieht mein Script also so aus:

    [autoit]

    While 1
    If @Hour = 9 & @Min = 0 Then Exitloop
    EndIf
    WEnd

    [/autoit]


    Also hab ich jz kurz geschrieben, und für Benutzer, die einen Wecker erstellen wollen in dem sie jeden Tag eine andere Uhrzeit angeben können, habe ich dies' vorbereitet:

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $input1,$input2
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Wecker", 212, 127, 192, 124)
    $Button1 = GUICtrlCreateButton("Wecker starten", 16, 72)
    $Input1 = GUICtrlCreateInput("", 16, 8, 177, 21)
    $Input2 = GUICtrlCreateInput("", 16, 40, 177, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    MsgBox(64,"Wecker-Message","Der Wecker wurde ausgeführt und wird nun zu der angegeben Uhrzeit ausgeführt")
    $Input1 = GUICtrlRead($Input1)
    $Input2 = GUICtrlRead($Input2)
    If $Input1 = "" Or $Input2 = "" Then
    MsgBox (16,"","Fehlende Angaben")
    ContinueLoop
    EndIf

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

    EndSwitch
    If @Hour & @MIN = $Input1 & $Input2 Then
    MsgBox(64,"Wecker","Kling Kling")
    EndIf
    WEnd

    [/autoit]


    Na ja ok ^^
    LG Lukas