Maison >développement back-end >C++ >Comment obtenir un timing précis à la milliseconde en C sous Linux sans compter sur clock() ?

Comment obtenir un timing précis à la milliseconde en C sous Linux sans compter sur clock() ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-13 12:15:02402parcourir

 How to Achieve Millisecond Precision Timing in C   on Linux Without Relying on clock()?

C : Comment obtenir des millisecondes sous Linux sans les limitations de Clock()

Contrairement à Windows où clock() renvoie des millisecondes, l'implémentation de Linux arrondit le résultat au millier près, ce qui donne uniquement une précision de deuxième niveau. Le besoin d'un timing au niveau de la milliseconde soulève la question : existe-t-il une solution C standard sans utiliser de bibliothèques tierces ?

La réponse : gettimeofday()

La réponse réside dans la fonction POSIX standard gettimeofday(). Cette fonction fournit des informations de synchronisation de haute précision en remplissant une structure temporelle avec l'heure actuelle. Voici un exemple en C utilisant gettimeofday() :

#include <sys/time.h>
#include <stdio.h>
#include <unistd.h>

int main()
{
    struct timeval start, end;

    long mtime, seconds, useconds;    

    gettimeofday(&start, NULL);
    usleep(2000);
    gettimeofday(&end, NULL);

    seconds  = end.tv_sec  - start.tv_sec;
    useconds = end.tv_usec - start.tv_usec;

    mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5;

    printf("Elapsed time: %ld milliseconds\n", mtime);

    return 0;
}

Ce code montre comment calculer le temps écoulé en millisecondes en combinant les composants secondes et microsecondes obtenus à partir de gettimeofday(). A noter que l'addition de 0,5 est appliquée pour arrondir le résultat à l'entier le plus proche.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn