[gelöst] QTimer mit 1ms zu langsam?

Alles rund um die Programmierung mit Qt
Antworten
Gartenzwerg
Beiträge: 33
Registriert: 19. Oktober 2004 08:10

[gelöst] QTimer mit 1ms zu langsam?

Beitrag von Gartenzwerg »

Hallo,

ich habe vor ein Programm für Sportwettkämpfe (z.B. Laufen und Schwimmen) mit Hilfe von Qt 4 zu schreiben.
Dazu wollte ich eine Art Stoppuhr programmieren. Die Zeiten sollten im Format hh:mm:ss,zzz zur Verfügung stehen.

Start und Stop des Timers

Code: Alles auswählen

timerId=startTimer(1);
...
killTimer(timer);

Code: Alles auswählen

void TimeDialog::timerEvent(QTimerEvent* timerEvent)
{
  time=time.addMSecs(1);
  
  labelCurrentTime->setText(time.toString("hh:mm:ss,zzz"));
}
Doch verglichen mit einer normalen Uhr läuft diese viel zu langsam. Erst ab einem Timerintervall von 10ms hält die QtUhr mit der normalen Uhr Schritt.

Mache ich irgendetwas falsch? Wieso ist der QTimer so langsam?
Bisher gibt es keinen rechenintensiven Code, der ihn behindern könnte.
(CPU: Athlon XP 2000+)

MfG
Gartenzwerg
Zuletzt geändert von Gartenzwerg am 2. Juni 2007 18:56, insgesamt 1-mal geändert.
buhrmi
Beiträge: 18
Registriert: 21. Oktober 2006 14:43
Kontaktdaten:

Beitrag von buhrmi »

Hi,

dein eigener Code ist zwar nicht rechenintensiv, aber der darunterliegende schon. Ein Timer muss jedesmal einen neuen Thread aufmachen, und er muss immer die GUI neu zeichnen.

Du solltest die Timer nicht zur Zeitmessung verwenden, sondern NUR um die Gui in einem interval upzudaten.

Mein Vorschlag wäre, ein QTime objekt zu erzeugen mit QTime elapsedTime = QTime::currentTime() und elapsedTime.start() aufzurufen. Dann om onTimerEvent einfach elapsedTime.elapsed() abfragen. Auf diese Weise hast du millisekunden-genauigkeit, kannst aber die Timer so grob einstellen wie du möchtest.
Gartenzwerg
Beiträge: 33
Registriert: 19. Oktober 2004 08:10

Beitrag von Gartenzwerg »

Vielen Dank! Nun funktioniert es wie erwartet. Diese Funktion von QTime war mir gänzlich unbekannt.

MfG
Gartenzwerg
Antworten