Fonction de granularité dans le temps

Est-il possible de vérifier la granularité de la fonction gettimeofday () fournie par POSIX?

Appelez-le dans une boucle serrée, notez la différence entre la valeur actuelle et la précédente lorsqu’elle change. Quelque chose comme ce qui suit:

#include  #include  int main() { struct timeval timevals[2]; int cur = 0; while (1) { gettimeofday(&timevals[cur], NULL); int diff = timevals[cur].tv_usec - timevals[!cur].tv_usec; if (diff) printf("%d\n", diff); cur = !cur; } } 

Sur mon système, il semble que la granularité soit d’environ 2 usec (environ 50/50 une ou deux microsecondes, avec des valeurs aberrantes par centaines ou par milliers probablement dues à un changement de tâche).

Au lieu de gettimeofday() , envisagez d’utiliser clock_gettime() (en spécifiant l’horloge CLOCK_REALTIME ). C’est aussi POSIX, et supporte une fonction clock_getres() pour obtenir la résolution.

La méthode posix actuelle pour obtenir la résolution de gettimeofday () est

 #include  long ticks_per_sec = sysconf(_SC_CLK_TCK); 

Dans les anciennes versions de posix (ne sachant pas quand le changement s’est produit), la valeur CLOCKS_PER_SEC était #defined.