Seite 1 von 1

Q-Timer

Verfasst: 19. September 2006 16:06
von grazerstudent
Q-Timer Probleme

Der Timer kommt regelmäßig, alle ca. 3666µs (start->timer(4))
Das Timeout ruft einen Slot auf, der nie länger als 3.3ms dauert (er führt ein Update eines Widgets aus - dabei ist es wichtig, dass dessen Frequenz stimmt - der exakte Zeitpunkt wird in diesem Slot mit einer for-Schleife abgewartet; das alles bleibt wie gesagt zeitmäßig immer weit unter 4 ms).
Wieso braucht der Timer genau dann, wenn diese 3.3ms Schleife auszuführen ist
plötzlich ca. 30ms, bis er wieder ein timeout-Signal liefert?

lg Georg

Verfasst: 19. September 2006 16:19
von Goos
Du hast vergessen deine QT Version zu nennen.
... woher willst du so genau wissen, dass dein Update nie laenger als 3.3 ms dauert? :D
Ich glaube, du versuchst da sachen die du so nicht machen solltest ;)

Goos

Verfasst: 19. September 2006 16:37
von tachyon
Was Du da versuchst, ist mit normalen Multitasking-Betriebssystemen nicht terminiert möglich. Du kannst nie mit Sicherheit sagen, wieviel Zeit der Zeitscheibe das Betriebssystem einem Prozess oder Thread jeweils zur Verfügung stellt. Wenn Du während Deinem Timer-Aufruf z.B. gerade viel Zeit vertrödelst, kann sich die Abarbeitung der Timer-Behandlungsroutine z.B. schon mal verzögern (grob erklärt, ich kenne die genauen Interna vom QTimer schließlich nicht). Für solche Zahlenspiele (insbesondere im µs-Bereich) gibt es Realtime-Kernel bzw. Realtime-Erweiterungen (Z.B. für Linux).

Verfasst: 21. September 2006 15:32
von grazerstudent
Qt-Version 4.0.0
Danke für alle bisherigen Einträge.

Ich muss als Vorgabe Windows verwenden. Gibts da auch die Möglichkeit Realtime zu programmieren - oder ist das zum Scheitern verurteilt?
Kann man sich den QTimer SourceCode irgendwo anschauen?

Das Problem ist nicht die Ungenauigkeit des Timers, sondern die Tatsache, das ca. 8 timeout-Signale (8*3.6ms = 30ms) nicht gesendet werden, obwohl mein Code, der durch dieses timeout-Signal ausgeführt wird weniger als 3.6ms dauert (die Zeit wird also nicht vertrödelt).

Ich hab den Timer getestet: er ist zumindest auf meinem PC auf ca. 500µs genau und kann auch timeouts in 1ms-Intervallen senden. Mehr brauche ich doch nicht um Frequenzen von bis zu 30 Hz darzustellen (viel schneller kann eh der Bildschirm nicht).
Es funktioniert übrigens auf µs genau mit 2 Frequenzen in getrennten widgets; aber ich brauche sie auch innerhalb von einem widget, um vertikale und horizontale Streifen in unterschiedlichen Frequenzen blinken zu lassen.
Vielleicht hat jemand eine Lösung anderer Natur! Kann man 2 getrennte Objekte in einem Widget darstellen, ohne dass das andere übermalt wird? Das wäre dann die simplste Lösung für mich.

Danke für alle zukünftigen Einträge.
lg georg