aus adlibregister() in äußere schleife springen

  • grüße erst einmal :D

    ich hab da ein kleine problemchen, ich habe 2 schleifen die ineinander verschachtelt sind und nebenbei ein adlibregister() laufen mit einem timeout damit sich mein programm nicht aufhängt... der grundgedanke ist einfach, egal was passiert, es darf sich nicht aufhängen, es muss in der äußeren schleife weiterlaufen, deswegen ist exit() hier umbedingt zu umgehen.

    hier mal ein beispielcode:

    [autoit]

    For $j = 1 to 10
    AdlibRegister("error", 10000)
    for $i = 1 to 10
    if blubb($i) = -1 then ExitLoop
    MsgBox(0, "", "i " & $i)
    Next
    MsgBox(0, "", "j " & $j)
    Next

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

    func blubb($zaehler)
    If $zaehler = 3 then Return -1
    MsgBox(0, "", "blubb")
    EndFunc

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

    Func error()
    Exit ;ich will hier nur in die äußere schleife springen, aber exitloop geht nicht...
    EndFunc

    [/autoit]

    wie ihr seht, hab ichs hinbekommen aus einer funktion heraus dasselbe zu erreichen, aber adlibregister kann ich ja wohl schwer mit return arbeiten.. :(

    bin für jede hilfe dankbar

    3 Mal editiert, zuletzt von jawed (23. September 2013 um 16:45)

  • Habe den Text und dein Beispiel jetzt leider nur überflogen. Aber Nebenbei ist bei Autoit grundsätzlich nicht möglich. Soweit ich weiss. Also Adlibregister stoppt für die Ausführung die Hauptschleife in deinem Fall. Die Funktion error() pausiert sozusagen deine Hauptschleife.

    Zudem nach Ausführung der error Funktion springt das Programm zurück in die Hauptschleife. ... Weiss nicht vllt verstehe ich nicht so wirklich genau was du machen willst. Und wenn du das Adlibregister ständig aufrufst, kannst du das auch mit einem normalen Funktionsaufruf machen.

    2 Mal editiert, zuletzt von BinäryChief (23. September 2013 um 16:11)

  • Habe den Text und dein Beispiel jetzt leider nur überflogen. Aber Nebenbei ist bei Autoit grundsätzlich nicht möglich. Soweit ich weiss. Also Adlibregister stoppt für die Ausführung die Hauptschleife in deinem Fall. Die Funktion error() pausiert sozusagen deine Hauptschleife.

    Zudem nach Ausführung der error Funktion springt das Programm zurück in die Hauptschleife. ... Weiss nicht vllt verstehe ich nicht so wirklich genau was du machen willst.

    mein adlibregister gibt jeder äußeren schleife (hier zwar "nur") 10s zeit um durchzulaufen, ist das nicht der fall (in meinem hauptprogramm sind das 10min), will ich mit der nächsten äußeren schleife beginnen.
    sollte die äußere schleife durchgelaufen sein, wird mein adlibregister neu gesetzt und der nächsten äußeren schleife wieder 10sec(min) gegeben um durchzulaufen. (es ist nur zur sicherheit, dass falls das programm sich aufgehängt hat, es mit dem nächsten lauf weitermachen soll).
    mit exit beende ich das ganze script, und DAS will ich nicht, es soll nur den schleifendurchlauf abbrechen und mit der nächsten weitermachen.

  • ok, hier ist die lösung falls es noch jemanden interessiert :d


    [autoit]

    $continue = 0
    For $j = 1 to 10
    AdlibRegister("error", 10000)
    $continue = 0
    for $i = 1 to 10
    if blubb($i) = -1 then ExitLoop
    if $continue = 1 then exitloop
    MsgBox(0, "", "i " & $i)
    Next
    MsgBox(0, "", "j " & $j)
    Next
    func blubb($zaehler)
    If $zaehler = 3 then Return -1
    MsgBox(0, "", "blubb")
    EndFunc
    Func error()
    $continue = 1
    EndFunc

    [/autoit]