Maison >développement back-end >C++ >Pourquoi `time()` renvoie-t-il parfois la même valeur avant et après une courte tâche ?

Pourquoi `time()` renvoie-t-il parfois la même valeur avant et après une courte tâche ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-03 15:07:40290parcourir

Why Does `time()` Sometimes Return the Same Value Before and After a Short Task?

Mesurer facilement le temps écoulé

Question :

Lors de la mesure du temps écoulé dans un programme utilisant time(), pourquoi les valeurs avant et après pourraient-elles rester les mêmes ? pareil ?

Explication :

time() renvoie l'heure actuelle en secondes depuis l'époque. Si la période de temps à mesurer est courte, la différence entre les valeurs avant et après peut être trop petite pour être détectée.

Solution :

Pour mesurer avec précision une courte période périodes, envisagez d'utiliser des méthodes alternatives :

C Structured Time Mesure :

struct timeval startTV, endTV;
gettimeofday(&startTV, NULL); 
// Execute time-consuming tasks
gettimeofday(&endTV, NULL); 

timersub(&endTV, &startTV, &diff);
printf("**time taken = %ld %ld\n", diff.tv_sec, diff.tv_usec);
  • la structure timeval représente une valeur temporelle avec une précision allant jusqu'à la microseconde.
  • gettimeofday() obtient l'heure actuelle de la journée.
  • timersub() calcule la différence entre deux structures timeval.
  • Le résultat est rapporté en secondes (diff.tv_sec) et microsecondes (diff.tv_usec).

Mesure du temps de précision de style C 11 :

#include <chrono>

std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
// Execute time-consuming tasks
std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();

std::cout << "Time difference = " << std::chrono::duration_cast<std::chrono::microseconds>(end - begin).count() << "[µs]" << std::endl;
std::cout << "Time difference = " << std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count() << "[ns]" << std::endl;
  • std :: la bibliothèque chrono fournit une heure de haute précision mesure.
  • std::chrono::steady_clock mesure le temps depuis un moment arbitraire inconnu.
  • La différence de temps est calculée comme un objet std::chrono::duration, qui peut être converti en microsecondes ou nanosecondes.

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