Siehe auch mein Kommentar von hier: http://www.lazarusforum.de/viewtopic.php?f=55&t=9414
Auf Windows erlaubt der "Multi-Media-Timer", welche das MSEgui Timersystem verwenden kann, eine Auflösung von 1ms, die normale WM_TIMER -Message ist an den Windows Systemtick von normalerweise etwa 15ms gebunden. Das Windows Tick-Intervall kann mittels timeBeginPeriod() verändert werden: https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Die Auflösung der Lazarus Timer sollte damit verbessert werden können. Die Einstellung hat aber Einfluss auf das gesamte System, siehe Link.
Linux hat keinen festen System-Tick, daher liegt auf Linux die Timerauflösung im Mikrosekunden Bereich.
mse hat geschrieben:Die Auflösung der Lazarus Timer sollte damit verbessert werden können....
Auflösung ist aber nicht Genauigkeit.
Ein TTimer - Event wird frühestens aufgerufen, wenn der eingestellte entsprechende Zeitpunkt erreicht wird. eine Spezifikation für spätestens gibt es nicht . Zum Zeiten-Messen also ziemlich ungeeignet.
Das denke ich auch, besonders bei kleinen Intervallen.
Ich denke für den Normalfall reichen die 15-20ms locker, schnellere Sachen bekommen unser Auge sowieso nicht mit.
eine Auflösung von 1ms, die normale WM_TIMER -Message ist an den Windows Systemtick von normalerweise etwa 15ms gebunden.
Somit hat sich die Frage geklärt, das es vom OS abhängig ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Ehrlich gesagt, ich verstehe diese Fragestellung überhaupt nicht. Im ersten Post schreibst du etwas davon, dass bei Windows mit dem Timerintervall bei 20 ms "Schluss" wäre. Was soll das bedeuten? Natürlich kann ich kleinere Zeiten in den Timer eintragen. Und in dem Code-Beispiel wird eine Zahl hochgezählt. Was soll das aussagen? Keine Ahnung. Bitte denke beim Formulieren der Frage daran, dass es auch Leute gibt, die von deinem aktuellen Problem überhaupt keine Ahnung haben.
Oder beziehst du dich auf den anderen Thread mit dem Rad, wo unter 20 ms keine Beschleunigung der Drehung mehr erkennbar ist? Wie lange dauert es überhaupt, dieses Drehrad auf den Canvas zu malen? Und erinnere ich mich richtig, dass du Windowsprogramme unter Wine in Linux entwickelst? Wie schnell ist die Graphikausgabe unter Wine im Vergleich zu nativem Linux bzw. Windows? Vielleicht erklärt das schon diese Beobachtung (sofern ich das Richtige reininterpretiert habe...)
mschnell hat geschrieben:Ein TTimer - Event wird frühestens aufgerufen, wenn der eingestellte entsprechende Zeitpunkt erreicht wird. eine Spezifikation für spätestens gibt es nicht . Zum Zeiten-Messen also ziemlich ungeeignet.
Von PureBasic unter Windows kenne ich ElapsedMilliseconds(), welches die Millisekunden seit Rechnerstart zurückgibt (innerhalb der Grenzen der Windows Timeslots). Durch Differenzbildung kann man hier sehr gut Zeitspannen messen.
Gibt es einen vergleichbaren Befehl für FreePascal?
mschnell hat geschrieben:Ein TTimer - Event wird frühestens aufgerufen, wenn der eingestellte entsprechende Zeitpunkt erreicht wird. eine Spezifikation für spätestens gibt es nicht . Zum Zeiten-Messen also ziemlich ungeeignet.
Von PureBasic unter Windows kenne ich ElapsedMilliseconds(), welches die Millisekunden seit Rechnerstart zurückgibt (innerhalb der Grenzen der Windows Timeslots). Durch Differenzbildung kann man hier sehr gut Zeitspannen messen.
Gibt es einen vergleichbaren Befehl für FreePascal?
GetTickCount aus der Windows API oder der LCL für Cross Kompatibilität