Quelle est la meilleure façon de calculer un décalage horaire en C ++? Je chronomètre la vitesse d'exécution d'un programme, donc je m'intéresse aux millisecondes. Mieux encore, secondes. Millisecondes.
La réponse acceptée fonctionne, mais doit inclure ctime ou time.h comme indiqué dans les commentaires.
Réponses:
Voir la
std::clock()
fonction.Si vous voulez calculer le temps d'exécution pour vous-même (pas pour l'utilisateur), il est préférable de le faire en ticks d'horloge (pas en secondes).
EDIT:
fichiers d'en-tête responsables -
<ctime>
ou<time.h>
la source
clock()
renvoie le temps CPU consommé par le programme. Donc, si le programme est exécuté en parallèle, le temps retourné par la fonction serait le temps accumulé sur tous les processeurs, plutôt que le temps écoulé cplusplus.com/reference/ctime/clocksi vous utilisez c ++ 11, voici un simple wrapper (voir l' essentiel ):
Ou pour c ++ 03 sur * nix:
Exemple d'utilisation:
la source
Timer()
et l'appel àelapsed()
if!std::chrono::high_resolution_clock::is_steady
- ce qui est le cas sous Linux!J'envisagerais sérieusement l'utilisation de Boost, en particulier boost :: posix_time :: ptime et boost :: posix_time :: time_duration (à http://www.boost.org/doc/libs/1_38_0/doc/html/date_time/posix_time .html ).
Il est multiplateforme, facile à utiliser et, d'après mon expérience, il offre le plus haut niveau de résolution temporelle qu'un système d'exploitation offre. Peut-être aussi très important; il fournit de très bons opérateurs IO.
Pour l'utiliser pour calculer la différence dans l'exécution du programme (en microsecondes; probablement exagéré), cela ressemblerait à quelque chose comme ceci [navigateur écrit, non testé]:
la source
J'ai ajouté cette réponse pour préciser que la réponse acceptée montre le temps CPU qui n'est peut-être pas le temps souhaité. Parce que selon la référence , il y a le temps CPU et l'heure de l'horloge murale . L'heure de l'horloge murale est l'heure qui montre le temps écoulé réel indépendamment de toutes les autres conditions telles que le processeur partagé par d'autres processus. Par exemple, j'ai utilisé plusieurs processeurs pour effectuer une certaine tâche et le temps processeur était élevé à 18 secondes, alors qu'il fallait en fait 2 secondes en temps réel de l'horloge murale.
Pour obtenir l'heure réelle que vous faites,
la source
boost 1.46.0 et plus inclut la bibliothèque Chrono :
la source
std::chrono
espace de noms avec presque le même contenu.Sous Windows: utilisez GetTickCount
la source
Vous pouvez également utiliser clock_gettime . Cette méthode peut être utilisée pour mesurer:
Le code est le suivant:
»
la source
juste au cas où vous seriez sous Unix, vous pouvez utiliser
time
pour obtenir le temps d'exécution:la source
Juste une remarque: si vous utilisez Windows et que vous avez vraiment besoin de précision, vous pouvez utiliser QueryPerformanceCounter . Cela vous donne du temps en (potentiellement) nanosecondes .
la source
Pour moi, le moyen le plus simple est:
en utilisant ce morceau de code, vous n'avez pas à faire le classique
end - start
.Profitez de votre approche préférée.
la source
Obtenez l'heure système en millisecondes au début, puis à nouveau à la fin, et soustrayez.
Pour obtenir le nombre de millisecondes depuis 1970 dans POSIX, vous écrirez:
Pour obtenir le nombre de millisecondes depuis 1601 sous Windows, vous écririez:
Si vous vouliez normaliser la réponse Windows afin qu'elle renvoie également le nombre de millisecondes depuis 1970, vous devrez alors ajuster votre réponse de 11644473600000 millisecondes. Mais ce n'est pas nécessaire si vous vous souciez uniquement du temps écoulé.
la source
Si vous utilisez:
Ensuite, vous aurez besoin des éléments suivants pour obtenir le temps en secondes:
la source
Cela semble fonctionner correctement pour Intel Mac 10.7:
la source