Timer
-
Hallo,
ich wollte in meiner Software einen Timer benutzen, um alle 200ms eine Aktion durchzuführen.
Wie kann man das auf Linux realisieren. Ich scheitere ehrlich gesagt schon an der Frage, wie man das in C++ allgemein anstellt...
Ich habe mir überlegt einen Thread zu erzeugen (mit boost), der die aktion macht und dann für 200ms schlafen gelegt wird, ehe er wieder von vorne anfängt.
Ist das der richtige Weg?? Wie macht ihr das? Dass ein Timer nach genau 200ms zuschlägt, kann man sowieso nur auf einem Echzeitsystem gewährleisten oder?Danke euch
Viele Grüße
Siegfried
-
Siefried schrieb:
Ist das der richtige Weg?? Wie macht ihr das? Dass ein Timer nach genau 200ms zuschlägt, kann man sowieso nur auf einem Echzeitsystem gewährleisten oder?
Da gibts einige Möglichkeiten. Ein einfacher Weg geht so:
int main() { for(;;) // endlosschleife { Sleep(200); // 200 ms schlafen; unter Linux gibt es sleep(), ich weiß die Auflösung aber gerade nicht aktion(); // aktion ausführen } }Die 200 ms sind nur ein grober Richtwert, wie du schon vermutet hast.
Das kannst du auch in einen Thread auslagern, dann musst du aber darauf achten, dass die ausgeführte Aktion threadsafe ist.
-
Ich glaub der TE wollte, dass die Aufgabe aller 200ms ausgeführt wird und nicht 200ms zwischen Ende und Anfang der Fkt liegen...
richtig?
-
unskilled schrieb:
Ich glaub der TE wollte, dass die Aufgabe aller 200ms ausgeführt wird und nicht 200ms zwischen Ende und Anfang der Fkt liegen...
Ja, das hast du wohl recht, das war zu kurz gedacht von mir.
Da ich gerade die verschiedenen Einheiten der Standard-Zeitmessfunktionen nicht auswendig kenne und GetTickCount() nicht gefragt ist, sag ich lieber nix mehr dazu
-
Siefried schrieb:
ich wollte in meiner Software einen Timer benutzen, um alle 200ms eine Aktion durchzuführen.
Wie kann man das auf Linux realisieren. Ich scheitere ehrlich gesagt schon an der Frage, wie man das in C++ allgemein anstellt...
Ich habe mir überlegt einen Thread zu erzeugen (mit boost), der die aktion macht und dann für 200ms schlafen gelegt wird, ehe er wieder von vorne anfängt.
Ist das der richtige Weg??Ja, das ist ein Weg. Besser wäre es IMHO, wenn es unter Linux eine Timer-API gäbe (gibt es eine?), die alle x Millisekunden eine Funktion aufruft. Unter Windows gibt es sowas.
Siefried schrieb:
Dass ein Timer nach genau 200ms zuschlägt, kann man sowieso nur auf einem Echzeitsystem gewährleisten oder?
Richtig, wobei es bei einem 200ms-Takt wohl nicht so kritisch ist, ob die Funktion mal 20ms später aufgerufen wird oder nicht. Echtzeitsysteme sind IMHO dann wichtig, wenn Ereignisse µS-genau sein müssen.