Obtenir une exécution exacte de temps en C++ (micro secondes)
Je veux obtenir une exécution exacte de temps en micro-secondes de mon programme mis en œuvre avec le C++.
J'ai essayé d'obtenir le temps d'exécution avec clock_t mais il n'est pas précis.
- pourquoi pensez-vous, ce n'est pas précis?
- Étant donné que le temps d'exécution est soumis à la charge sur le CPU, la disponibilité de la mémoire, cache, toutes les I/O, planificateur de threads, etc. Êtes-vous sûr que vous avez besoin de ce niveau de précision?
- Si l'une des réponses ici résolu votre problème, veuillez le marquer comme acceptée. De cette façon, votre question cessera d'apparaître dans la réponse à la section.
- J'ai besoin d'un temps d'exécution avec des micro-secondes et clock_t se permettre un temps d'exécution avec des millisecondes....
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide de c++11 ou tard, vous pourriez utiliser
std::chrono::high_resolution_clock
.Un cas simple d'utilisation :
Cette solution a l'avantage d'être portable.
auto
, le type de données dois-je utiliser pourstd::chrono::high_resolution_clock::now()
?high_resolution_clock::time_point
(exemple ici: cplusplus.com/reference/chrono/high_resolution_clock/now ) oustd::chrono::high_resolution_clock::time_point
en cas de non utilisation de l'espace de noms.Si vous êtes à la recherche de savoir combien de temps est consommé dans l'exécution de votre programme de shell Unix, l'utilisation de Linux le temps comme ci-dessous,
Deuxièmement, si vous voulez le temps pris dans l'exécution de nombre de déclarations dans le code du programme (C) essayez de faire usage de gettimeofday() comme ci-dessous,
Le nouveau C++11
std::chrono
de la bibliothèque est l'un des plus complexes tas de bordel j'ai jamais vu ou essayé de comprendre comment les utiliser, mais au moins il est multi-plateforme!Donc, si vous souhaitez simplifier et de le rendre plus "C-like", y compris la suppression de tous les type-safe classe des trucs qu'il fait, voici 3 simple et très facile à utiliser des fonctions pour obtenir des horodateurs, en millisecondes, de la microseconde, et nanosecondes...qui ne m'a pris qu'environ 12 heures pour écrire*:
* (Désolé, j'ai été plus d'un développeur embarqué qu'un programmeur informatique donc tout cela de haut niveau, résumé statique-membre à l'intérieur de la classe-à l'intérieur de l'espace de noms à l'intérieur de l'espace de noms à l'intérieur de l'espace de noms trucs me confond. Ne vous inquiétez pas, je vais aller mieux.)
Et voici quelques références:
Si vous êtes sur Windows, vous pouvez utiliser QueryPerformanceCounter
Voir Comment utiliser la fonction QueryPerformanceCounter à l'heure de code dans Visual C++
Vous pouvez le mettre autour d'un appel à
CreateProcess(...)
etWaitForSingleObject(...)
pour l'ensemble de la durée de vie des processus, autrement autour de la principale fonction de votre code.CreateProcess(...)
etWaitForSingleObject(...)
pour l'ensemble de la durée de vie des processus, sinon autour de sa fonction principale. C'est une solution raisonnable, je ne pense pas qu'il mérite vraiment downvotes si...std::chrono::high_resolution_clock
n'est pas disponible ou est fixé à un pas-si-haut-que-possible de la minuterie. Cette solution spécifique est nécessaire.