Probleme mit Schleifen

  • http://www.autoitscript.com/autoit3/docs/keywords.htmHallo,

    ich habe fogendes Problem ich möchte eine Variable setzen, wenn sie erfüllt ist soll er in eine Schleife gehen z.B While($Variable1 = True) Then .. WEnd
    Wenn $Variable1 nicht mehr gültog ist also False soll er wieder zum Anfang ,, sitze schon seit 5 Stunden daran und raste gleich aus ..... ^^ Er geht entweder in die While ohne das $.. erfüllt ist oder wenn er rein geht kommt er nicht raus auch wenn die Variable nicht mehr true ist...

    [autoit]


    $Variable = ....

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

    While 1
    ..
    ..
    ..
    While ($Variable1 = True)
    ...
    ...
    If $Variable1 = False Then
    ExitLoop
    Endif
    WEnd
    WEnd

    [/autoit]

    So stell ich mir es vor aber halt das es funkzioniert :S
    Bitte um hilfe ?(

  • Spoiler anzeigen
    [autoit]


    HotKeySet("{F3}", "_true")
    HotKeySet("{F4}", "_false")
    Global $x = True
    if $x = True Then _while()
    While 1
    MsgBox(0, "", "Schleife 1")

    if $x = True Then _while()
    WEnd

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

    func _while()
    While 1
    MsgBox(0, "", "Schleife 2")
    if $x = False Then ExitLoop
    WEnd
    EndFunc

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

    Func _true()
    $x = True
    EndFunc

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

    Func _false()
    $x = False
    EndFunc

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

    meinst du so in etwa? hotkey 1 in schleife 1, hotkey 2 in schleife 2 ;)
    mfg tim

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • kannst die func _while() naturlich auch weglassen und in die andere Schleife schreiben, aber so ist übersichtlicher fin ich^^
    Statt Hotkey nimmst du einfach deine Art mit der du den Wert der Variable änderst
    hoff du verstehst wie ich meine^^

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • Nein es soll ja automatisch gehen ..
    Wenn sich die Variable verändert dann soll er aus der While Schleife raus und wieder zum Anfang ... sprich er sol in die While Schleife nur rein wenn die Variable stimmt und wenn sie nicht mehr stimmt soll er wieder raus ... ? ?(

  • Also:

    $V1 = veränderbarer Wert
    While 1
    .....
    .....
    If $V1 = True Then
    While 1
    ...
    ...
    If $V1 = False Then
    Exit Loop
    Endif
    Wend
    Endif
    WEnd

    So stell ich es mir vor aber ich bekomm es nicht hin das wenn sich der Wert verändert er es erkennt und aus der Schleife -wieder- raus geht weil der Wert sich verändert hat und dann halt wieder rein wenn der Wert wieder stimmt 8| Wie könnte man es umsezten?

  • [autoit]


    Global $x = false
    While 1
    ;irgend ein Code

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

    MsgBox(0, "", "Schleife 1")

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

    if Mod(@MIN, 2) = 0 Then $x = True
    if $x = True then
    While 1
    MsgBox(0, "", "Schleife 2")
    if Mod(@MIN, 2) <> 0 Then $x = False
    if $x = false Then ExitLoop

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

    WEnd
    EndIf

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

    WEnd

    [/autoit]


    also so?
    wenn z.B. ein Ereignis auftritt ändert sich die Variable in True und geht in die Schleife, wenn ein Ergeibnis die Variable in false bringt, geht sie zurück an den Anfang. Meinst du so?
    oder bin ich wieder falsch^^
    im Bsp:
    Aktuelle minuten sind gerade: variable = true, geht in schleife
    aktuelle minuten ungerade: variable = false, geht an anfang

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • das kommt schon eher hin :P

    Gibt es irgend eine möglichkeit das man bei While schon abfrag z.B while($v1 = True) oder While IsArray($v1) = True
    und halt einbefehl in dieser Schleife wenn $v1 wieder false wird das er wieder raus geht und loop beendet

  • [autoit]


    Global $x = false
    if Mod(@MIN, 2) = 0 Then $x = True

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

    While $x = False
    if Mod(@MIN, 2) = 0 Then $x = True
    ;irgend ein Code

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

    MsgBox(0, "", "Schleife 1")

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

    While $x = True

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

    if Mod(@MIN, 2) <> 0 Then $x = False
    MsgBox(0, "", "Schleife 2")
    WEnd

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

    WEnd

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

    also so?
    solange $x false ist, bleibt er in der 1. schleife, wenn $x true ist, geht er in die 2. ist x$ wieder false, zurück zum anfang. Das Ganze ohne exitloop ;)

    Edit: post von Bugfix übersehen^^

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • achso ja^^
    hab ich beim testen bemerkt, aber vergessen vorm posten abzuändern :D

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]