Script vernünftig Pausieren

  • Hi,
    ich möchte gerne mein Script mit über das Traymenü pausieren können.
    Jetzt habe ich mich zunächst mal an ein Testscript probiert, jedoch klappt das ganz irgendwie nicht.

    Hier mal der Test-Code

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    #include "Array.au3"

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

    HotKeySet("{F5}", "_Start")
    HotKeySet("{F6}", "_Pause")
    HotKeySet("{F7}", "_Exit")

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

    AutoItSetOption("TrayAutoPause", 0)
    opt("GUIOnEventMode", 1)
    Opt("TrayOnEventMode",1)
    Opt("TrayMenuMode",3)

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

    Global $gProgstatus = True

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

    ;+++++Tray-Menu+++++
    $StartItem = TrayCreateItem("Start (F5)")
    TrayItemSetOnEvent(-1,"_TrayStart")
    $StopItem = TrayCreateItem("Stop (F6)")
    TrayItemSetOnEvent(-1,"_TrayStop")
    TrayCreateItem("")
    $ExitItem = TrayCreateItem("Exit (F7)")
    TrayItemSetOnEvent(-1,"_TrayExit")
    TraySetState()

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

    Func _TrayStart()
    _Start()
    EndFunc

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

    Func _TrayStop()
    _Pause()
    EndFunc

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

    Func _TrayExit()
    Exit
    EndFunc
    ;-----Tray-Menu-----

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

    ;~~~~~~~~MAIN~~~~~~
    While 1
    MsgBox(0,"","main-schleife")
    If $gProgstatus = True Then
    MsgBox(0,"","innere if schleife")
    _test()
    EndIf
    MsgBox(0,"","if schleife beendet")
    ToolTip('',0,0)
    WEnd
    ;~/~/~/~/~/~/~/~/~/~/~

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

    Func _test()
    MsgBox(0,"","test")
    ;vortlaufendes Programm
    ;
    ;
    EndFunc

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

    Func _Start()
    ConsoleWrite("StartFunc: _Start" & @CRLF)
    $gProgstatus = True
    ConsoleWrite("Script is now running" & @CRLF)
    ToolTip('скрипт запущен',0,0)
    Sleep(1000)
    ToolTip("")
    ConsoleWrite("EndFunc: _Start" & @CRLF)
    EndFunc

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

    Func _Pause()
    ConsoleWrite("StartFunc: _Pause" & @CRLF)
    $gProgstatus = False
    ConsoleWrite("Script paused" & @CRLF)
    Do ; Mit der Do While schleife reagiert die GUi (Das Trayicon nicht mehr)
    sleep(100)
    ToolTip('skript pausiert',0,0)
    Until $gProgstatus = True
    ToolTip("")
    MsgBox(0,"","pause")
    ConsoleWrite("EndFunc: _Pause" & @CRLF)
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Mache ich das ganze mit DO Until in der Pause - Funktion , dann reagiert die GUI nicht mehr.
    Löse ich das ganze ohne diese Schleife, so muss das Script ja noch "seine Runde zu Ende drehen".
    Dies ist aber bei längeren Scripten nicht gewünscht.


    Hat da jemand eine Lösung für mich?
    Ich verzweifel da den ganzen Tag schon dran -.-

    mfg Karroffel

    Einmal editiert, zuletzt von karroffel (31. Mai 2011 um 23:04)

  • Wenn ich da so auf die schnelle drüber nachdenke. Wie wäre es mit einer GUIGetMsg() Abfrage in der Do-Until Schleife?

    Spoiler anzeigen
    [autoit]


    Do
    $msg = GUIGetMsg()

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

    Select
    Case
    $msg = $StartItem
    $gProgstatus = True
    EndSelect

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

    Until $gProgstatus = True

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Bevor ich einen neuen Thread eröffne stelle ich mal meine Frage auch gleich hier, wenn niemand etwas dagegen hat.
    Kann man eine For - Next Schleife eigentlich auch per Button klick pausieren?

    Mit freundlichen Grüßen

    volle

  • Spoiler anzeigen
    [autoit]

    #Include <Misc.au3>

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

    For $i = 0 to 6
    If _IsPressed("1B") Then ;ESC zum pausieren
    While True
    Sleep(20)
    If _IsPressed("20") Then ExitLoop ;Space zum fortfahren
    WEnd
    EndIf
    Sleep(500)
    ToolTip($i)
    Next

    [/autoit]

    So? :)

    MfG hellboy

    [autoit]

    Do
    _help($user)
    Until $questions = 0

    [/autoit]

    Meine Werke:
    Ste`s Web-Radio

    Einmal editiert, zuletzt von hellboy3 (31. Mai 2011 um 22:37)

  • So, ich habs jetzt so gelöst, dass ich noch im laufe des Scripts in den einzelnen Funktionen immer wieder mal abfrage ob $gProgstatus = False ist und wenn ja dann einfach return 0 zum "ausbrechen" aus der funktion... wenn $gProgstatus dann wieder auf true gesetzt wird, fängt das programm halt ganz normal von vorne in der main-schleife an.

    danke an die, die es versucht habe :)