Kurze Frage zu Func/whileschleifen

  • Hi alle miteinander,
    stellt euch folgendes vor: Eine While schleife in der viele IF schleifen eingebaut sind, die Bedingungen abfragen. Jetzt trifft eine Bedingung zu und die If schleife startet Func xyz(). Die erste Zeile dieser Func lautet sleep(1500). Läuft in dieser Zeit die While schleife weiter - werden also die bedingungen weiter abgefragt? Falls nein, wie bekomme ich das hin?
    Beispiel:

    [autoit]

    func 1()sleep(1500)...Endfunc...func n()sleep(1993)...Endfunc
    While 1If ... Thencall("1")ENdifIf XXX Thencall("2")ndifIf ABC Thencall("n")Endif...Wend

    [/autoit]

    Edit BugFix: Also mit dem Löschen des Startposts verschaffst du dir hier keine Freunde. :cursing: [Post wiederhergestellt]
    Edit: s.u.

    2 Mal editiert, zuletzt von Aquaplant (19. November 2009 um 23:50)

  • Weis nict ob ich das richtig verstanden habe, aber wenn du mit der If abfrage eine Funtion aufrufst wird diese ausgeführt und dann wieder dort fortgesetzt wo du die funktio aufgerufen hast.

    Und nich was: Funktionen ruft man nicht mir call auf sondern so:

    [autoit]

    _funktion()

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

    func _funktion()
    bla
    endfunc

    [/autoit]

    Computers are like Airconditioning. They don´t work with open Windows.

  • Ja hast du richtig verstanden. Gibt es denn keine Möglichkeit, dass so etwas parallel läuft ohne zich scripte zu erstellen :( ?
    Mit call geht es genauso, aber deine Art kenne ich auch. Wollte nur nicht, dass man allzu lange überlegen muss was eine 1 da soll^^

  • Du könntest die While Schleife, wleche bedingungen abfragt in eine eigene Funtkion packen, und diese während dem "warten" nochmal abfragen. somit würde das ganze Rekursiv/verschachtelt arbeiten und sich solange in warteschleifen packen, bis die Funktionen dann immer abgearbeitet werden

    Whilefunction -> startet Func 1 -> startet Whilefunction (wenn nichts zutrifft wird Func1 weiter abgearbeitet, ansonsten ..) -> Startet Func 2 -> Startet WhileFunc -> Startet Func 1 -> usw.
    Und das ganze so lange bis keine der gegebenen Bedingungen zutrifft und die Funktionen dann abgearbetet werden. So stell ich mir das zumindest vor.

    du musst dann allerdings die sleeps() durch Timerinit und Timerdiffs ersetzen. Statt Sleep(1500) machst du

    [autoit]

    $t = timerinit()
    Do
    WhileFunction()
    Until $timerdiff($t) > 1500

    [/autoit]

    Und nein, Parrallel gehts nicht. Immerhin ist AutoIt nicht Multithread/Multitaks whatever fähig. Es geht nur eine sache aufeinmal, außer du lagerst es auf mehrere Skripte aus.

  • Die Sleep-Funktion pausiert das Script um einen bestimmten Zeitraum. Wenn das Sleep() im Script für eine bestimmte Aktion nötig ist, beispielsweise das Warten auf eine externe Anwendung, dann wäre es ziemlich schlecht, das Script NICHT diese Zeit warten zu lassen....
    Aber genau das verlangst du! Wasch mich, aber mach mich nicht nass.....

    Zitat

    Die erste Zeile dieser Func lautet sleep(1500)

    Warum?

    Zitat

    Läuft in dieser Zeit die While schleife weiter - werden also die bedingungen weiter abgefragt?

    nein/nein

    Zitat

    Falls nein, wie bekomme ich das hin?

    Nach deiner Beschreibuung garnicht...
    Poste dein Script, es gibt in den meisten Fällen Möglichkeiten den logischen Ablauf zu optimieren. GGf. kann man auch mit den Timer/Adlib-Funktionen arbeiten, dazu muss man allerdings das Script sehen,

  • Wenn die While-Funktion nochmal aufgerufen wird, musst du aber aufpassen, dass sie nicht wieder von vorne anfängt, sonst gibts ne Endlosschleife...

    While-Func-->Func X-->While-Func-->Func X...

  • [autoit]

    Func Func1()
    $t = TimerInit()
    Do
    _WhileFunc("Func1")
    Until TimerDiff($t) > 1500
    TrayTip(" ","Func1",1)
    EndFunc

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

    Func _WhileFunc($LastFunc)
    While 1
    If $BedingungFuerFunc1 = True And Not $LastFunc = "Func1" then
    Func1()
    EndIf

    If $BedingungFuerFunc2 = True And Not $LastFunc = "Func2" then
    Func2()
    EndIf
    WEnd
    EndFunc

    [/autoit]

    So stell ich mir das vor

  • Es ist so, dass ich per TCP Nachrichten erhalte und versende. Das externe Script welche diese an mich schickt muss daher immer zwischen senden und empfangen wechseln. Die Umstellung dauert i.d.R. ~1sek. Jetzt soll bei mir aber trotzdem noch weiter geprüft werden ob andere externe Scripte auch noch etwas zu mir senden, gleichzeitig aber die Antwort nach der verstrichenen Sekunde abgeschickt werden. Ich werde wohl mein Script nochmal aufdröseln müssen. Da liegt aber schon das nächste Problem, da ich - wie es scheint - keine Variabeln von Script zu Script weitergeben kann ohne sie in eine Zwischendatei (ini, txt,...) zu schreiben und auszulesen - Das dauert aber zu lange.

  • Zitat

    Es ist so, dass ich per TCP Nachrichten erhalte und versende

    Was hat DAS mit Sleeps in verschachtelten IF/While/Wend Schleifen zu tun?

    Zitat

    Die Umstellung dauert i.d.R. ~1sek.

    Wieso das?
    Server empfängt Nachricht und schickt ein "Nachricht fehlerfrei empfangen" an den Client. Dieser weiss nun, daß die Nachricht (fehlerfrei) angekommen ist und geht in den Empfangsmodus...Dauer im internen Netz ca 10-20 ms...je nach Länge der Nachricht.

  • SEuBo: Ich würde ein while schleife nie in eine funktion schreiben, jedenfalls nicht ohne irgeendeinen exitloop od sowas, sonst macht das script ja nur mehr ie funktion und sonst nix mehr.

    Aquaplant: Poste doch pls mal dein Script, dann können wir uns mal anschauen wie man das ganze Optimieren kann und müssen nich die ganze Zeit raten wo jetzt genau das Problem liegt.

    Mfg

    Computers are like Airconditioning. They don´t work with open Windows.

  • Wieso wurde jetzt der Startpost gelöscht?