autoit vs python - die systemuhr und fragen dazu

  • Das Hauptproblem ist, dass AutoIt-GUIs standardmäßig erstmal nicht mit Double Buffering gerendert werden.
    Sprich: Änderungen am Bild werden direkt auf das derzeit angezeigte Bild geschrieben, was dann zum Flackern führt.
    Double-Buffering arbeitet hingegen mit 2 Bildern. Dem derzeit angezeigten und einer Kopie davon auf der die Änderungen vorgenommen werden.
    Erst wenn diese Änderungen vollständig passiert sind wird das angezeigte direkt mit der bearbeiteten Kopie ausgetauscht.

    Dies kann man aber in AutoIt aktivieren - mit der GUI-Option "WS_EX_COMPOSITED".
    Damit sollte das Bild schon deutlich ruhiger werden.

    Darüber hinaus ist der Aufbau des Zählers nicht ganz glücklich.
    Du gehst bei dem aktuellen Skript davon aus, dass jeder Schleifendurchlauf exakt 10ms dauert.
    Denn darauf baust du ja deinen Counter auf.
    Vermutlich weil du Sleep(10) verwendest.

    Das Problem ist jedoch, dass GuiGetMsg() ebenfalls wie ein implizites Sleep wirkt (siehe Hilfe) um CPU-Belastung herunterzufahren.
    Daher ist zum einen dein Sleep unnötig, da GuiGetMsg bereits dessen Aufgabe der CPU-Entspannung erledigt und zum anderen ist dein 10er-Counter völlig daneben, was man auch an den angezeigten Werten sieht die nicht mit den Sekunden im Einklang laufen.
    Ich habe mal gemessen - bei mir benötigt ein Schleifendurchlauf 30-40ms.
    Das +10 bei den Millisekunden kann man sich also schenken.

    Daher schlage ich vor, anstatt den Message-Loop-Modus zu verwenden auf den OnEvent-Modus umzuswitchen um das GuiGetMsg() in der Schleife loszuwerden und zum anderen direkt @MSEC zu verwenden anstatt mit diesem Counter herumzuopern:

  • wow. das ist ja der hammer. das sieht ja jetzt megafluessig und richtig aus. ganz wie in python. das gefaellt mir. ich hatte eine uhr mit bonusfunktionen geschrieben my python und wollte diese in autoit umsetzen bis ich das flackern sah und dachte: 'das ist nicht gut so'. ich hatte dann noch jemand gefragt der mir etwas von GDI+ erzaehlt hat und das war mir dann zu kompliziert. ich hatte die idee dann schon wieder ueber board geworfen um die uhr von python in autoit zu uebersetzen, aber mit deinem beitrag schoepfe ich gerade neue hoffnung. toll. vielen dank!

    ConsoleWrite("=====================>>> "&"About Me:"&" <<<=====================" & @CRLF)
    ConsoleWrite("Someday I will know how to do it but that day is not today!" & @CRLF)
    ConsoleWrite("===================>>> "&"bankesbusters"&" <<<===================" & @CRLF)