[AutoIt] Alternative zu sleep()

  • Aaaalso. Thema heute: Alternativen zum Befehl sleep().


    Wie ihr sicher wisst dient der Befehl

    Code
    1. sleep($zeit)


    dazu, ein Script für die Zeit $zeit zu stoppen, wörtlich: "schlafen zu lassen".


    Leider kann einem dieser Befehl ganz schön Steine in den Weg legen. Dazu betrachten wir mal kurz das folgende Script:


    Code
    1. #include <Misc.au3>
    2. While 1
    3. sleep(5000)
    4. Consolewrite("Läuft immer noch..."&@CRLF)
    5. If _ispressed("1B") then ExitLoop
    6. WEnd


    Er schläft 5 Sekunden, schreibt etwas in die Konsole, schläft wieder 5 Sekunden... und so weiter. Wir hätten nun gerne, dass er das Skript sofort beendet, sobald man "Escape" drückt. Das Problem: Während ein Skript "schläft" nimmt es keine Messages entgegen und ignoriert den Tastendruck eiskalt. Wir müssen also wie blöde auf der Escape Taste "herumhämmern", damit wir den Zeitpunkt zwischen den 5 Sekunden sleep() abpassen, in welchem es nicht am Schlafen ist und er das Skript auch wirklich beendet.


    Das ist extrem nervig. Einen Ausweg bietet diese "eigene" Sleep-Funktion:




    Wie ihr seht ruft man nicht das AutoIt interne sleep($zeit) auf, sondern die selbst geschriebene Funktion _EIGENSSLEEP($zeit). Diese Funktion hält das Skript nicht einfach an, wie sleep() es tut, sondern guckt über einen Timer ob die gewünschte Zeit abgelaufen ist und reagiert währenddessen über eine eigene While-Schleife auf Tastatureingaben und Messages.


    Resultat: Auch wenn das "eigentliche" Skript gerade mitten in einem ewig langen sleep() hängt (weil man z.B. bei einem Browsergame gerade 15 Minuten darauf wartet, dass ein Auftrag fertig wird), reagiert es trotzdem auf Messages.


    Ich hoffe das hilft Einigen!