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.