Seite 1 von 1

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

Verfasst: 2. Juni 2007 16:32
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

Verfasst: 2. Juni 2007 18:17
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.

Verfasst: 2. Juni 2007 18:55
von Gartenzwerg
Vielen Dank! Nun funktioniert es wie erwartet. Diese Funktion von QTime war mir gänzlich unbekannt.

MfG
Gartenzwerg