While Schleife nach gewisser Zeit verlassen..

  • huhu, ich keampfe hier ab und zu mit einer uendlichen while schleife.. deswegen meine Frage

    Code
    while Bedienung or 90sek
    Anweisung
    endwhile

    Wie kann ich das hinbringen das er die bedienung erfüllt aber wenn es leanger wie 90sekunden dauert die whileschleife wieder verläst ?

    nicht auslachen ^^ ich kanns nicht besser. Natürlich geht es nich so wies hier steht. Das merk ich schon am syntax das das ne negative Note wäre gg

    2 Mal editiert, zuletzt von Bullz (17. September 2007 um 11:01)

  • so ginge es mit deiner möglichkeit...

    [autoit]


    $startTimer=TimerInit()
    While 1
    $diff=TimerDiff($startTimer)
    If $diff>1000 Then ExitLoop
    ; - deine Anweisungen...
    WEnd
    MsgBox(0, "", "Grenze bei 1000. Vergangene Zeit: "&$diff)

    [/autoit]

    nur hast du ein problem - der exitloop wird nie ausgeführt werden wenn eine deiner anweisungen hängen bleibt!

  • find ich auch deutlich eleganter ;)

    [autoit]


    $startTimer=TimerInit()
    Do
    ; - Deine Anweisungen
    $diff=TimerDiff($startTimer)
    Until $diff>1000
    MsgBox(0, "", "Grenze bei 1000. Vergangene Zeit: "&$diff)

    [/autoit]
  • thx wenigstens lag ich beim ersten gar nicht so weit weg ;) langsam wirds ja was mit mir Günschnabel hehe

    was heist hängenbleiben.. ? Wenn meine normale Bedienung versagt werde ich doch immer die Möglichkeit haben nach X Sekunden die while schleife zu verlassen ? Das Ding kann also bei geeigneter Zeitangebe nie unendlich durchlaufen oder ?

  • while ist eine kopfgesteuerte schleife - die schleife wird solange ausgeführt die bedingung nicht mehr wahr(true) ist. bei while 1 ist die bedingung immer true = endlosschleife

    die schleife kann nun nur über funktionen verlassen werden -> ExitLoop, Break usw.

  • Zitat

    Original von oliverh
    while ist eine kopfgesteuerte schleife - die schleife wird solange ausgeführt die bedingung nicht mehr wahr(true) ist. bei while 1 ist die bedingung immer true = endlosschleife

    die schleife kann nun nur über funktionen verlassen werden -> ExitLoop, Break usw.

    thx für die antwort

  • habe jetzt das problem das ich alle 5min min das hauptprogramm verlassen will um kurz etwas anders zu machen... und dann soll er wieder für 5 min weiter im hauptprogramm bleiben..


  • Ich würde das so machen, bricht nie automatisch ab:

    [autoit]


    $startTimer=TimerInit()
    While 1
    $diff=TimerDiff($startTimer)
    If $diff >= 5*60*1000 Then
    ExtraCode()
    $startTimer=TimerInit()
    EndIf
    ; - dein Hauptprogramm...
    WEnd

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

    Func ExtraCode()
    ;dein eingeschobenes programm
    EndFunc

    [/autoit]
  • warum funktioniert mein code eigentlich nicht... ich find ihn von dem gedankengang sehr logisch.. jedenfalls für mich :P thx für die hilfe

    jetzt weis ich was ihr endlich meint mit bricht nie ab... ich mach ne fette forschleife die erst in 100 jahren auslaufen würde und eure while 1 würde unendlich lang laufen jetzt hab ich das mal gecheckt gg

    Einmal editiert, zuletzt von Bullz (18. September 2007 um 19:15)

  • 1. ) wie kann ich in einem sendbefehl kleine pausen einbauen

    send("r")
    sleep(200)
    send("b")

    das in einen einzeiler

    send("r{F1 40}b"}

    so habe ich es bisher gemacht... die lösung find ich aber nicht optimal .. da ich scheatze die 40ig f1 tasten drücke sicher nicht das beste sind für das system

    kann man das auch anders lösen ?

    2.)

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

    while $monster = PixelGetColor ( 57 , 119 )
    $not = Timerdiff($notschalter)
    if $not > 90000 then ExitLoop ; hier 1
    fight()

    WEnd

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

    Func fight()
    sleep(100)
    if $monster <> PixelGetColor ( 57 , 119 ) then ExitLoop ;hier 2
    Endfunc

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

    Warum ist 1 ns kein error und 2 aber schon... sind beide in der while schleife drinnen...

    habe 2 schon gelöst. Er gab einen fehler aus das exitloop eine for while schleife etc braucht... er erkennt nicht das eine while schleife vorhanden ist wenn ich meine if schleife in eine funktion packe... ist das normal oder so was wie ein mini bug ?

    2 Mal editiert, zuletzt von Bullz (19. September 2007 um 01:29)

  • Hallo,

    wenn du eine bestimmte Funktion in einem bestimmten Zeitabstand aufrufen willst, dann schau dir doch mal den Befehl "AdlibEnable" an, damit läßt sich das wesentlich einfacher realisieren.


    zu Punkt 2:

    - If ... Then ist keine Schleife, sondern ein Conditionally Statement, genauso wie:
    Select...Case
    Switch...Case
    Schleifen (Loops) sind:
    For...Next
    While...WEnd
    Do...Until
    With...Endwith
    For...In...Next
    und nur diese kannst du mit ExitLoop verlassen.

    - ExitLoop kann nur funktionieren wenn es direkt in einer Schleife aufgerufen wird, nicht in wenn in es in irgendeiner Funktion vorkommt, die in einer Schleife aufgerufen wird. Wenn du Funktionen immer als eigenständige Programme betrachtest, dann siehst du gleich, daß das in deinem Beispiel nicht funktionieren kann, da das ExitLoop in der Funktion, nicht innerhalb einer Schleife vorkommt.

    Grüße
    Stilgar

    Einmal editiert, zuletzt von Stilgar (19. September 2007 um 08:36)