Hi @all,
ich würde gerne in meinem Script die FPS ermitteln. Bei einer DO-Schleife, wo bei jedem Durchlauf nur ein Teil auf dem Screen irgendwo gemacht wird, ist ja einfach.
Das habe ich mir bei der Firework Demo von UEZ angeschaut. Was aber wenn ich einige Funktionen, welche ebenfalls Dinge in der GUI ändern, aus der Haupt-DO-Schleife
herausgenommen habe und jetzt durch AdLibRegister (=ALR) aufrufe?
OK, bei jedem ALR Aufruf pausiert mein Script (meine DO-Schleife), aber es kann ja vorkommen, das ALR 2-3 mal öfters aufgerufen wird, als meine DO-Schleife für einen Durchlauf braucht...
Erhöhe ich also den FPS Zähler immer nur am Ende meiner DO-Schleife oder auch nach Durchlauf jeder ALR Funktion?
Ich versuche das mal in einem Beispiel Code darzustellen (der Code funktioniert so natürlich nicht, es soll es nur veranschaulichen):
AdLibRegister("DO_Something_1", 25)
AdLibRegister("DO_Something_2", 30)
AdLibRegister("DO_Something_3", 40)
AdLibRegister("FPS", 1000)
Local $FPS = 0
Do
ConsoleWrite("Do-Schleife" & @CRLF)
[...]
;
; Dauerschleife mit weiteren Befehlen und Aktionen innerhalb der GUI
; welche zwischen 10 und 60ms pro Durchlauf brauchen
;
[...]
$FPS += 1
Until [...] ; Programm beendet wird
Func (FPS)
ConsoleWrite("FPS: " & $FPS & @CRLF)
;
; AdLibRegister Aufruf für FPS Reset
;
$FPS = 0
EndFunc
Func (DO_Something_1)
ConsoleWrite("DO_Something_1" & @CRLF)
[...]
;
; AdLibRegister Aufruf mit weiteren Befehlen und Aktionen innerhalb
; der GUI welche zwischen 5 und 15ms pro Durchlauf brauchen
;
[...]
$FPS += 1;==> hier auch ???
EndFunc
Func (DO_Something_2)
ConsoleWrite("DO_Something_2" & @CRLF)
[...]
;
; AdLibRegister Aufruf mit weiteren Befehlen und Aktionen innerhalb
; der GUI welche zwischen 10 und 20ms pro Durchlauf brauchen
;
[...]
$FPS += 1;==> hier auch ???
EndFunc
Func (DO_Something_3)
ConsoleWrite("DO_Something_3" & @CRLF)
[...]
;
; AdLibRegister Aufruf mit weiteren Befehlen und Aktionen innerhalb
; der GUI welche zwischen 15 und 30ms pro Durchlauf brauchen
;
[...]
$FPS += 1;==> hier auch ???
EndFunc
Alles anzeigen
Nachtrag:
Ich habe mal gemessen und zwar in meiner alten Routine (ohne ALR) und komme dort auf einen Durchschnitt von 32 FPS. Denselben Wert erreiche ich in der neuen
Routine, wo ich 3 Funktionsaufrufe aus der Haupt-DO-Schleife entfernt habe auch. Wenn ich allerdings wie oben im Beispiel innerhalb jeder Funktion, welche durch
das ALR angetriggert wird, ebenfalls den FPS Counter erhöhe, komme ich auf einen Durchschnittswert von 123 FPS.