While Beenden?

  • Hallo Leute

    Ich habe eine kleine frage und zwar wenn ich eine in eine func eine while 1 mit wend packe und diese zb durch einen button ausführen lasse.

    Wie kann ich diese function wieder beenden weil dan in der gui auch der exit butten sowie andere buttens nicht mehr fuktionieren Bitte HILFE :S ?(

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

    Func Test()
    While 1
    MSGBOX(0,"test", "test")
    wend
    endfunc

    [/autoit]
  • For, Do und While Schleifen kannst du mit

    [autoit]

    ExitLoop

    [/autoit]

    wieder beenden

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Das heist in eine andere func an den anfang exitloop schreiben und dann ist die while beendet ?

  • Solange die Schleife innerhalb einer Funktion ist wäre auch ein return möglich um die komplette Funktion zu verlassen. Am sinnvollsten ist es aber eine angemessene Abbruchbedingung für die Schleife zu deklarieren. Endlosschleifen sollte man mit Bedacht einsetzen. Exitloop oder auch return sind eher für unerwartete Fehler gedacht um eine Schleife/Funktion auch vor dem Erreichen der eigentlichen Abbruchbedingung zu verlassen. Im Falle von return können auch Daten an die aufrufende Funktion übergeben werden, also zum Beispiel eine -1 für einen Fehler, oder aber eine Variable wenn alles gut ging.

    Um mal zu deinem Beispiel zu kommen:

    [autoit]


    Func Test()
    local $counter=0
    While 1
    $antwort = MSGBOX(3,"Frage", "Soll weitergemacht werden?")
    if $antwort = 7 then return -1 ; es wurde nein gedrückt, also nicht weiter machen und die ganze Funktion verlassen
    if $antwort = 2 then exitloop ; es wurde Abbrechen gedrückt, also Schleife verlassen aber die Funktion fortsetzen
    $counter += 1 ; erhöht den Zähler um 1 ( diese und die folgenden Zeilen der Schleife werden nur ausgeführt wenn Ja gedrückt wurde )
    if $counter=2 then return 1 ; verlässt die ganze Funktion nach 2 Schleifendurchläufen
    wend
    msgbox(0,"Funktion Test", "Die Funktion wurde abgebrochen und wird nun verlassen.") ; erscheint nur wenn die Schleife per exitloop verlassen wird, also Abbrechen gedrückt wurde
    endfunc

    [/autoit]

    EDIT: Es macht natürlich keinen Sinn die $counter Abbruchbedingung innerhalb der Schleife zu setzen. Stattdessen würde man eher while $counter < 2 verwenden. Es ging hier aber nur darum verschieden Möglichkeiten zu zeigen wie man eine Endlosschleife verlassen kann, auch wenn es sich hier nicht mehr wirklich um eine Endlosschleife handelt.

    Einmal editiert, zuletzt von misterspeed (4. Juni 2011 um 14:26)