Hier eine Variante, wie man bei zeitkritischen Skripts das Timing genauer unter die Lupe nehmen kann und so Schwachstellen schnell und leicht findet. Für mich ist das sehr wichtig, denn ich starte praktisch ständig Befehle und Tasteninteraktionen und erwarte dabei sehr präzise und kurze Antwortzeiten meiner Skripte. Dazu muss ich alle potentiell kritischen Operationen erkennen können.
Über die Variable "zeit_nehmen" lässt sich die Zeitmessung zentral ausschalten, ohne die zahlreichen Aufrufe entfernen zu müssen.
Hier der Code, in dem ist alles erläutert:
Code: Select all
/******************* Scripttiming messen **********************************************************************
Mit Hilfe der beiden Module, die einfach in ein bestehendes Skript integriert werden können,
kann das Skripttiming übersichtlich gemessen werden.
Zur Nutzung erfolgt an den zeitkritischen Stellen ein Aufruf:
zeit_nehmen("Beschreibung")
Erfolgt 2 s lang kein entsprechender Aufruf, wird eine Messagebox mit den Timingdaten angezeigt.
Der große Vorteil ist, dass das Skript beim Zeitmessen keine zeitlich relevanten Unterbrechungen verursacht.
Allzeit gutes Timing!
Halweg
*/
; Testaufruf
#q::
zeit_nehmen("Hotkey win-q wurde erkannt.")
SLEEP, 100
zeit_nehmen("Oparation wurde beendet.")
SLEEP, 500
zeit_nehmen("andere Operation wurde beendet.")
RETURN
zeit_nehmen(text="")
{
GLOBAL
; Allgemeine Einstellungen
zeiten_nehmen=1 ; schaltet die Zeitmessung ein und aus
zeitmessung__ergebnisverzoegerung=2000 ; Wieviel ms nach der lezten Messung soll das Ergebnis der Zeitmessung angezeigt werden.
IF Zeiten_nehmen ; Aktivierung nur, wenn diese globale Variable gesetzt ist
{
messpunkt+=1
messzeit%messpunkt%:=A_TICKCOUNT
messzeittext%messpunkt%:=text
SETTIMER, zeitmessung_anzeige,-%zeitmessung__ergebnisverzoegerung%
}
}
; Dieses Modul wird zeitgesteuert aufgerufen, wenn nach einer Zeitnahme eine Zeitlang nichts passiert
zeitmessung_anzeige:
IF messpunkt
{
; Zusammenstellen der anzuzeigenden Übersicht
zeittext=Ergebnis Zeitmessung`n
startzeit:=messzeit1
LOOP, %messpunkt%
{
vorher:=A_INDEX-1
IF vorher>0
zeitzeile:=messzeit%A_INDEX% - startzeit . "(+" . messzeit%A_INDEX% - messzeit%vorher% . " ms): " . messzeittext%A_INDEX%
ELSE
zeitzeile:=messzeit%A_INDEX% - startzeit . ": " . messzeittext%A_INDEX%
zeittext.=zeitzeile . "`n"
}
; Ausgabe der Messagebox
MSGBOX, %zeittext%
messpunkt=0
}
RETURN