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


Anmelden zum Antworten