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?

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