Funktionen wiederholen

  • Hallo liebe Autoit-Community,

    es gibt zu diesem (o.g.) Thema bereits einige threads, es ist allerdings nichts dabei, was mir weiterhilft.

    Das Problem ist kurz geschildert: Ich möchte eine Funktion in einem bestimmten Zeitintervall wiederholen, dabei aber auf Sleep() verzichten, weil das mein Script lahm legt, d.h. die GUI reagiert nicht mehr.
    Momentan arbeite ich mit einer Funktion, die sich alle 10 min selbst startet. Dieser 10min-delay entsteht dabei durch Sleep()was ich wie geschrieben vermeiden möchte.
    Ich habe es schon mit AdlibRegister() probiert, was an sich ganz gut funktioniert, nur leider startet die Funktion dabei erst NACH der abgelaufenen Zeit, was nicht wirklich im Sinne des Erfinders ist.
    Das Einbauen von TimeInit() und TimeDiff() bringt mich auch nicht weiter, da ich die Zeitdifferenz ja immer wieder abfragen müsste, was mich in eine unschöne Endlosschleife schickt.

    Für jeden kleinen Vorschlag / Hinweis bin ich dankbar.

    LG
    ~z8-Xrc

  • Alles sehr theoretisch.

    Wie wäre es, wenn du die Funktion beim Skriptstart ausführst und erst danach in AddlibRegister() packst?

    [autoit]


    _output()
    AdlibRegister("_output", 5000)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _output()
    MsgBox(0, "bla", "blub")
    EndFunc ;==>_output

    [/autoit]
  • Danke für die schnelle Antwort.
    Das habe ich auch schon überlegt, aber dann könnte ich die Funktion nur 2x ausführen, ich möchte sie jedoch sozusagen unendlich lange laufen lassen.
    In einer Schleifen würde _output() mit AdlibRegister("_output", 5000) kollidieren, oder? _output() würde ja dann trotzdem ständig ausgeführt - ich möchte es aber nur alle 10 Minuten haben.

    Ich möchte einfach umgehen, dass ein Sleep() oder eine Endlosschleife meine GUI lahm legt ...

  • Ich kapier nicht ganz wo das problem liegt.
    Adlibregister führt nach abgelaufener Zeit deine funktion aus.
    Egal was das script gerade macht.

    Zitat

    In einer Schleifen würde _output() mit AdlibRegister("_output", 5000) kollidieren, oder?


    wie meinst du das?

    Zitat

    ich möchte sie jedoch sozusagen unendlich lange laufen lassen.


    und wie das.

    Bitte genauer beschreiben

  • Lauffähige Komplettlösung?
    Code posten?
    Es geht mir um eine ganz prinzipielle Sache - so wie i2c bereits richtig erkannt hat - alles sehr theoretisch ...

    In einer Schleife würde _output() mit AdlibRegister("_output", 5000) kollidieren, oder?

    In einer Schleife würde _output() ausgeführt und per AdlibRegister("_output", 5000) auf 5000 msek 'vorgemerkt' werden. Dann würde er doch wieder _output ausführen ... und 'vormerken' usw. Demzufolge 'kollidiert' das zweite _output() mit dem ersten AdlibRegister("_output", 5000), richtig? Das würde bedeuten ich müsste wieder ein Sleep() einbauen, was ich nicht mag.

    ich möchte sie jedoch sozusagen unendlich lange laufen lassen.

    Ist das falsch formuliert? Ich meine das die Funktion bei Klick auf "Start" laufen soll, 10 Min warten, wieder laufen, 10 Min warten, wieder laufen usw. Und das immer und immer wieder (bzw. bis man "Stop" drückt...)

    Mit einen ähnlich allgemeinen Beitrag wie von i2c wäre mir geholfen.

    Vielen Dank
    ~z8-Xrc

    • Offizieller Beitrag

    Du kannst doch mehrere Funktionen registrieren. Wenn sich der Zeitpunkt des Starts überschneidet werden diese Pseudoparallel ausgeführt. Also erst eine und sofort anschließend die andere.
    Bsp.(Kollision alle 2 sec):

    [autoit]

    AdlibRegister('No1', 1000)
    AdlibRegister('No2', 2000)

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

    $t = TimerInit()
    Do
    Sleep(50)
    Until TimerDiff($t) >= 10000
    AdlibUnRegister('No1')
    AdlibUnRegister('No2')

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

    Func No1()
    ConsoleWrite('1: ' & @MIN & ':' & @SEC & @CRLF)
    EndFunc

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

    Func No2()
    ConsoleWrite('2: ' & @MIN & ':' & @SEC & @CRLF)
    EndFunc

    [/autoit]