timer dans un fil avec pthread en C?

dans les discussions, je dois travailler périodiquement à des intervalles différents, quel serait un bon moyen de le faire? Avec sleep (), j’ai besoin de suivre l’intervalle au prochain réveil, ce qui ne semble pas être le meilleur moyen.

Merci.

Vous pouvez utiliser clock_nanosleep avec l’indicateur TIMER_ABSTIME pour travailler avec des heures absolues au lieu des heures relatives pour votre sumil. Cela évitera les problèmes d’accumulation d’erreurs et les situations de concurrence où votre programme sera interrompu et un autre processus planifié après avoir obtenu l’heure actuelle, mais avant d’appeler la mise en veille.

Vous pouvez également utiliser des timers POSIX ( timer_create ) avec un gestionnaire de signal, où le signal que vous choisissez est bloqué dans tous les threads sauf le vôtre, ou avec la livraison du timer dans un nouveau thread qui signale une variable de condition ou un sémaphore que votre thread attend.

Dépend de combien de précision vous avez besoin:

  • vous pouvez utiliser clock_gettime, ce qui est très précis (~ 10 MHz). (Allez avec l’horloge en temps réel ou monotone)
  • Si la résolution et les frais généraux ne posent pas de problème, mais si vous souhaitez obtenir le temps réel, vous pouvez également vous gettimeofday