Thread alle 15ms starten

Alles rund um die Programmierung mit Qt
Antworten
Ozzy
Beiträge: 141
Registriert: 24. Oktober 2007 10:18

Thread alle 15ms starten

Beitrag von Ozzy »

Hi,

ich beschäftige mich gerade damit eine erste RT-Anwendung in QT zu schreiben. Hierbei kommen alle 15ms Daten über die serielle Schnittstelle von einem Sensor, die ich verarbeiten möchte. Da einiges gerechnet und gespeichert wird, liegt die Verarbeitungszeit bei ca. 5ms (langsames System). Das ganze soll in einem eigenen Thread laufen. Wie bekomme ich das aber am besten hin, dass dieser Thread periodisch mit 15ms läuft? Wenn ich ein 15ms-sleep aufrufe, dann ist ja die Berechnungszeit nicht mit eingerechnet. Ziehe ich diese Zeit ab, so müsste ich die Zeit immer ändern, wenn sich etwas an dem Verarbeitungsalgorithmus ändert. Was macht man da denn am besten? Einen Thread der alle 15ms läuft und einen weiteren Thread startet welcher die Berechnung übernimmt?

Vielen Dank im Voraus
Ozzy
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Thread alle 15ms starten

Beitrag von RHBaum »

RT-Anwendung in QT
Was verstehst du unter RT ?
Wenn du Realtime meinst, dann wird es bitter, weil sowas schreibt man nicht wirklich "unter" Qt.
Aber man kann RT Code mit Qt als Anzeige verbinden ^^
Aber ich denk eigentlich meinst Du was anderes ....

Aber Generell zu deinem Problem ....
DIe methode mit 2 Threads ist gangbar ... einer kontrolliert das scheduling, der andere fuehrt es aus.
Der eine setzt aller 15ms ne condition, der andere laueft immer auf die condition ...
DIe Frage ist nur, wie genau brauchst du es ...

Aber glaub du denkst auch genau falsch rum :-)
Hierbei kommen alle 15ms Daten über die serielle Schnittstelle von einem Sensor, die ich verarbeiten möchte.
Die Timer deines Rechners und der Sensor werden nicht synchron laufen, irgendwann gibts mal kurz "Salat" oder nen Aussetzter, je nachdem wie gross die datenmenge ist.
Normal macht man das bei solchen Asynchronen Operationen andersrum. Pollen ist immer der Weg, wenn nichts anderes mehr geht :-)
Lass nen Thread synchron aka blockierend auf das serielle Device lesen.
der springt immer nur an, wenn neue Daten angekommen sind.
Dort kannst checken und zusammenbauen und ueber Threadwechsel mechanismen(Events/conditions queues Messageloops) die extrahierten daten nem anderen thread oder deinem Mainthread zukommen lassen ...

Wenn der Sensor dir den Takt vorgibt (15ms) solltest du niemals versuchen den Takt aufm PC nochmal nachzubauen ... sondern auf den Sensor reagieren (ankommende Daten)

Ciao ...
Antworten