Startzeit / Laufzeit 1 Stunde

  • Hallo AutoItter,

    Ich habe eine Frage:
    Wie kann ich das Löesen das ein Programm zu einer Bestimmten Zeit Startet (das habe ich Schon)

    Spoiler anzeigen
    [autoit]


    If StringFormat("%s:%s", @HOUR, @MIN) > $start Then
    ; hier das was ausgeführt werden soll 1 Stunde lang
    ; nach start zeit
    EndIf

    [/autoit]


    aber nur eine Stunde Läuft.
    Mein Ziel soll es sein ich lasse das Script automatisch um 23:30 Starten und es Läuft dann 1 Stunde
    Mit der Laufzeit möchte ich aber noch Flexibel sein damit ich noch andere laufzeiten angeben kann
    z. B. 10 Minuten oder auch noch weniger.

    Danke Schonmal.

    Einmal editiert, zuletzt von micneu (22. August 2008 um 14:20)

    • Offizieller Beitrag
    [autoit]

    Global $sktiptTime = 5 ; Sekunden
    Global $startSktipt = TimerInit()

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

    AdlibEnable('_checkTime', 500)

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

    While 1
    Sleep(100)
    ToolTip(@HOUR & ":" & @MIN & ':' & @SEC & ' noch ' & Round($sktiptTime - TimerDiff($startSktipt) / 1000, 0) & ' Sekunden bis zum Ende!', 0, 0)
    WEnd

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

    Func _checkTime()
    If TimerDiff($startSktipt) >= $sktiptTime * 1000 Then Exit (0)
    EndFunc ;==>_checkTime

    [/autoit]
  • Ich versuche mal den code zu verstehen:

    Das Script ist auf Sekunden wenn ich variablen setze z. B. Zeile 12

    [autoit]


    $sktiptTime * 1000

    [/autoit]


    ändere in

    [autoit]


    $sktiptTime * $zeitvorgabe

    [/autoit]


    und die variable $zeitvorgabe mit dem wert 3600 vorbelege, habe ich stunden Richtig ??? :?:
    mal schauen wie ich es flexibel hinbekomme, werde mir den wert aus einer ini datei auslesen denke ich

  • Fast richtig!

    entweder Timderdiff() *1000 *3600
    oder Timerdiff() *3600000
    ;)

    Du könntest es so machen:

    [autoit]

    TimerDiff($startSktipt) >= $sktiptTime * 1000 * $zeitvorgabe Then Exit (0)

    [/autoit]

    Sekunden: $zeitvorgabe=1
    Minuten: $zeitvorgabe=60
    Stunden: $zeitvorgabe=3600
    usw...

    lgE

  • Hallo,

    Habe noch etwas probiert und noch nicht wirklich eine lösung

    Wie kann ich eine Funktion beenden und der Code wird weiter verarbeitet?

    Spoiler anzeigen
    [autoit]


    Global $start = "14:14"
    Global $zeitvorgabe = 60000
    Global $hZEIT = 360000
    Global $mZEIT = 60000
    Global $sZEIT = 1000
    Global $WIEDERHOLUNG = 20
    Global $sktiptTime = 1
    Global $i

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

    MsgBox(4096, "Script Wartet", "Zeitvorgabe: " & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime)
    While 1
    Sleep(1000)
    If StringFormat("%s:%s", @HOUR, @MIN) >= $start Then
    $startSktipt = TimerInit()
    AdlibEnable('_checkTime', 500)
    While 1
    MsgBox(4096, "Script Läuft!!!!!!", "Zeitvorgabe: " & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime)
    WEnd
    MsgBox(4096, "!!!!!!!!Script Ende", "Zeitvorgabe: " & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime)

    EndIf
    WEnd
    MsgBox(4096, "!!!!!!!!Script Ende", "Zeitvorgabe: " & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime)

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

    Func _checkTime()
    If TimerDiff($startSktipt) >= $sktiptTime * $zeitvorgabe Then Exit
    EndFunc ;==>_checkTime

    [/autoit]

    Habe versucht in Zeile 26 anstatt Exit mit AdlibDisable()
    danach lief mein script die ganze zeit
    was amche ich falsch?

    • Offizieller Beitrag

    Ich denke mal, Du möchtest folgendes machen:

    Spoiler anzeigen
    [autoit]


    Global $start1 = "14:14" ; die innere While...WEnd-Schleife läuft nur, wenn die
    Global $start2 = "15:13" ; aktuelle Uhrzeit zwischen diesen beiden Werten liegt
    Global $zeitvorgabe = 60000
    Global $hZEIT = 360000
    Global $mZEIT = 60000
    Global $sZEIT = 1000
    Global $WIEDERHOLUNG = 20
    Global $sktiptTime = 1
    Global $i

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

    MsgBox(4096, "Script Wartet", "Zeitvorgabe: " & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime)
    While 1
    If StringFormat("%s:%s", @HOUR, @MIN) >= $start1 And StringFormat("%s:%s", @HOUR, @MIN) <= $start2 Then
    $startSktipt = TimerInit()
    While 1
    $diff = TimerDiff($startSktipt)
    ToolTip("Zeitvorgabe: " & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime & @CRLF & Int($diff))
    If $diff >= $sktiptTime * $zeitvorgabe Then ExitLoop
    Sleep(100)
    WEnd
    MsgBox(4096, "!!!!!!!!Script Ende", "Zeitvorgabe: " & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime)
    EndIf
    Sleep(1000)
    WEnd
    MsgBox(4096, "!!!!!!!!Script Ende", "Zeitvorgabe: " & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime & $zeitvorgabe & @CRLF & "$sktiptTime: " & $sktiptTime)

    [/autoit]
  • Ja, danke das kommt schon langsam in die richtung die ich will.
    Ich habe versucht den Code für mich anzupassen und verstehe was nicht.
    Wenn die Ende Zeit erreicht wurde z.B. 10:15 will ich das das Programm scih beendet oder in meinem test die msgbox erscheint.
    Ich verstehe so den Code das wenn die start zeit erreicht wurde beginnt die innere while schleife.
    ist sie noch nicht erreicht läuft es immer in der äusseren while schleife.
    wie bekomme ich es hin das ich irgend wann das ganze programm beenden kann?
    wo liegt mein gedanken fehler.

    Spoiler anzeigen
    [autoit]


    Global $start1 = "10:10" ; die innere While...WEnd-Schleife läuft nur, wenn die
    Global $endZeit = "10:11" ; aktuelle Uhrzeit zwischen diesen beiden Werten liegt
    Global $zeitvorgabe = 60
    Global $WIEDERHOLUNG = 20
    Global $sktiptTime = 1
    Global $i

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

    MsgBox(4096, "Script Wartet", "Script Gestartet und Wartet auf die Aktivierungs Zeit")
    While 1
    If StringFormat("%s:%s", @HOUR, @MIN) >= $start1 And StringFormat("%s:%s", @HOUR, @MIN) <= $endZeit Then
    MsgBox(4096, "Script Gestartet und Aktiviert", "Script Aktiviert und Läuft")
    $startSktipt = TimerInit()
    While 1
    ; code
    WEnd
    MsgBox(4096, "!!!!!!!!Script Ende_____2", "Zeitvorgabe: " & @TAB & $zeitvorgabe & @CRLF & "$sktiptTime: " & @TAB & $sktiptTime & $zeitvorgabe & @CRLF & "$sktiptTime: " & @TAB & $sktiptTime)
    EndIf
    Sleep(1000)
    WEnd
    MsgBox(4096, "Script Ende_____2", "!!!!!!!!Script Ende_____2, !!!!!!!!Script Ende_____2" )
    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit]
    • Offizieller Beitrag

    Dazu fehlen erstmal ein paar Informationen: Was soll passieren, wenn Du das Script erst um 10:15 Uhr startest?
    Soll es warten bis zum nächsten Tag um 10:10 Uhr (um die innere Schleife abzuarbeiten) oder soll es sich dann sofort wieder beenden?
    Soll das Script nach abarbeiten der inneren Schleife auch die äußere Schleife verlassen (auch wenn es noch nicht 10:15 Uhr ist)?
    Wie oft soll die innere Schleife abgearbeitet werden? Denn wenn die innere Schleife zu früh (innerhalb der Start-/Endzeit) verlassen wird, dann trifft die If-Bedingung ja noch zu und die Schleife würde erneut durchlaufen.

  • Danke .... Jetzt habe ich es geschafft.

    Das Script soll nach erreichen der Start Zeit 1 Stunde Laufen, Nach dieser Stunde soll es sich Beenden.
    Ich habe das jetzt so angepasst:

    Spoiler anzeigen
    [autoit]


    Global $start = "11:18" ; die innere While...WEnd-Schleife läuft nur, wenn die
    Global $endZeit = "11:29" ; aktuelle Uhrzeit zwischen diesen beiden Werten liegt
    Global $zeitvorgabe = 60
    Global $WIEDERHOLUNG = 20
    Global $ScriptTimer = 1
    Global $i

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

    MsgBox(4096, "Script Wartet", "Script Gestartet und Wartet auf die Aktivierungs Zeit")
    While 1
    If StringFormat("%s:%s", @HOUR, @MIN) >= $start Then ;And StringFormat("%s:%s", @HOUR, @MIN) < $endZeit Then
    MsgBox(4096, "Script Gestartet und Aktiviert", "Script Aktiviert und Läuft")
    $startScript = TimerInit()
    While 1
    $diff = TimerDiff($startScript)
    ToolTip("Zeitvorgabe: " & $zeitvorgabe & @CRLF & "$ScriptTimer: " & $ScriptTimer & @CRLF & Int($diff/1000))
    If $diff > ($ScriptTimer * 1000) * $zeitvorgabe Then ExitLoop
    Sleep(100)
    WEnd
    MsgBox(4096, "!Script Ende2", "Zeitvorgabe: " & @TAB & $zeitvorgabe & @CRLF & "$ScriptTimer: " & @TAB & $ScriptTimer & $zeitvorgabe & @CRLF & "$ScriptTimer: " & @TAB & $ScriptTimer)
    ;If $endZeit >= $endZeit Then _PrgEnde()
    If $diff > ($ScriptTimer * 1000) * $zeitvorgabe Then _PrgEnde()
    EndIf
    Sleep(1000)
    WEnd

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

    Func _PrgEnde()
    MsgBox(0, "Programm Lauf beendet... ", "Das Programm ist durchgelaufen... ")
    Exit
    EndFunc ;==>_PrgEnde

    [/autoit]