Autor Beitrag
-delphin-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 200



BeitragVerfasst: Fr 07.10.05 19:41 
Hi, also ich hab rein aus Spaß an der Freude ein Prog geschrieben, das schlicht die Hundertstel hochzählt und dann Sekunden erhöht usw, eine Art Stoppuhr also.
Was mir dabei aufgefallen ist, ist folgendes:
Ich hab die Uhr mit der Timerkomponenten gemacht (also zeit := zeit + 1, Interval auf 1 gestellt und so weiter). Jedoch war die Uhr sehr ungenau, ich hab bei 100 hundertstel Sekunden eine Sekunde erhöhen lassen und es hat sich so arg unterschieden, dass ich das angepasst habe; der Wert bei dem es wenigstens bei den Sekunden einigermaßen (Abweichung: Eine Sekunde in 3 Minuten) gepasst hat war die Erhöhung bei 63 / 64 Hundertstel, d.h. locker 0,37 Sekunden Differenz.
Rein aus Interesse: Woran liegt das? =)
mg80s
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 33

WinXP SP2
Delphi 6 Personal ;) , C# (VS 2003 Prof.)
BeitragVerfasst: Fr 07.10.05 19:47 
Ich könnte mir vorstellen, dass TTimer bei Auslastung des Programms auch ins Stocken geraten kann, ist aber nur ne Vermutung. Gerade wenn Du zB die Hunderstel immer als Label anzeigen willst (falls Du das tust), ist das ja doch ganzschön Aufwand und da könnte es ja schonmal passieren, dass das ganze Programm nicht mehr hinterherkommt.
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Fr 07.10.05 19:53 
Die Timer-Botschaften sind Windows-Botschaften mit niedriger Priorität. Das heißt, es werden erst die meisten anderen Botschaften abgearbeitet, dann die Timer-Botschaften. Ich würde auf die Systemzeit zurückgreifen. Beim Starten wird gespeichert, auf welchem Wert die Systemuhr stand, der Timer wird nur noch zur Aktualisierung der Anzeige gebraucht.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
-delphin- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 200



BeitragVerfasst: Fr 07.10.05 20:13 
Also hängt es mit der Auslastung des Computers zusammen? Ja, ich lasse jede Hundertstel als Label anzeigen =)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 07.10.05 20:19 
Dr Timer hat sowieso nur eine Auflösung von ca 10 ms unter NT und ca. 40 ms unter Consumer Windows.
hallo
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 450

WIN XP, SuSE 9.3
D3 Prof, D6 Pers, 2005 Pers
BeitragVerfasst: So 09.10.05 10:28 
Rechne am besten über Zeitdifferenz!
Also wenn es jetzt 12:00:00:000 ist wie er angefangen hat und es jetzt 12:01:10:100 ist, dann ist der Zeitabstand 1 Min 10 Sec und 100 ms !

_________________
Der beste je Programmierte Trojaner: Windows XP
Wäre es nicht adequat, den Usus heterogener Termini zu minimieren?
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 09.10.05 10:36 
Ich mache es immer so (und die so ziemlich genau ;) ):
1. Beim Start der Zeitmessung GetCurrentTime in einer Variablen speichern
2. Eine Endlosschleife, in der die Zeitdifferent von der eingespeicherten Zeit zum aktuellen Wert von GetCurrentTime genommen wird und danach von ms in die gewünschte Zeitanzeige umgewandelt wird. Des weiteren muss in der Schleife ein Application.ProcessMessages oder Application.MessageHandle sein, damit die Schleife sich auch noch beenden lässt. Und falls er dir zu schnell zählt baust du noch sleep in die Schleife ein, um die Prozessorlast zu senken ;).
3. Die Beenden Variable zum Beenden der Schleife noch einbauen ;)
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: So 09.10.05 10:44 
@Heiko
Systemfreundlicher wäre es dann die Berechnung der Zeitdifferenz über ein OnTimerEreigniss zu regeln und das Intervall auf 10ms zu setzen. Dann wird kein Sleep, keine Abbruchsvariable und kein Application.ProcessMessages benötigt.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 09.10.05 10:53 
Es hängt davon ab, was man machen will, besser gesagt wofür man es braucht. Wer z.B. einen ziemlich genauen Timer braucht, ist damit besser beraten, ansonsten kann man es auch übern normalen Timer machen, allerdings sind die Aufrufe nicht ganz so gleichmäßig aus dem hier bereits genannten Grund.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: So 09.10.05 12:05 
user profile iconTilo hat folgendes geschrieben:
@Heiko
Systemfreundlicher wäre es dann die Berechnung der Zeitdifferenz über ein OnTimerEreigniss zu regeln und das Intervall auf 10ms zu setzen. Dann wird kein Sleep, keine Abbruchsvariable und kein Application.ProcessMessages benötigt.

was systemfreundlicheres als sleep gibt's gar nicht :mrgreen:

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 09.10.05 17:07 
Sehe ich eigentlich auch so, da der Prozessor dann weniger verschleißt, da er nicht so belastet wird :tongue: ;).
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: So 09.10.05 17:49 
user profile iconHeiko hat folgendes geschrieben:
Sehe ich eigentlich auch so, da der Prozessor dann weniger verschleißt, da er nicht so belastet wird :tongue: ;).


Noch verschleißarmer:
herrunterfahren und in die Vitrine stellen.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 09.10.05 17:52 
Dann haste aber keine StoppUhr mehr ;)