Funktion alle x ms oder x s aufrufen
-
Hallo,
welche Möglichkeiten habe ich unter Linux, eine Funktion alle x ms bzw. alle x s aufzurufen? Zwar kann ich folgendes machen:
... while(1) { function(); sleep(1); // oder usleep(1000); }
Dies hat aber ein enormen Nachteil: die Bearbeitungszeit der Funktion function() geht voll mit ein. Wenn diese auch noch unterschiedlich ist, wird das ganze noch unschöner.
Besser wäre sowas in dieser Richtung:
... starteTimer(functionpointer, timerintervall);
Freue mich auf eure Ideen.
Gruß
Gustav
-
Statt sleep oder usleep mit einer Konstanten die Restzeit aufgrund der aktuellen Zeit ausrechnen, bis die Funktion aufgerufen werden soll. "gettimeofday" liefert die aktuelle Zeit.
timeval t; gettimeofday(&t); while (true) { function(); t.tv_sec += delaySeconds; // hier eventuell noch tv_usec while (true) { timeval t1; gettimeofday(&t1); long msecdelay = t.tv_sec * 1000 + t.tv_usec / 1000 - t1.tv_sec * 1000 - t1.tv_usec / 1000; if (msecdelay <= 0) break; usleep(msecdelay); } }
-
Hallo,
danke für die schnelle Antwort. Werde ich gleich mal in einer schöne Funktion verpacken und testen.
Gruß
Gustav