C++ Garder une trace de combien de secondes se sont écoulées depuis le début du programme
Je suis en train d'écrire un programme qui sera utilisé sur une machine Solaris. J'ai besoin d'un moyen de garder une trace de combien de secondes se sont écoulées depuis le début du programme. Je parle très simple ici. Par exemple, j'aurais un int secondes = 0; mais comment pourrais-je aller sur la mise à jour de l'secondes variable que chaque seconde passe?
Il semble que certains des diverses fonctions de temps que j'ai regardé seulement le travail sur les machines Windows, donc je suis pas sûr.
Toutes les suggestions seraient appréciées.
Merci pour votre temps.
Avez-vous besoin d'un événement chaque secondes ? mise à jour de quelque chose ? ou tout simplement le total de secondes, le programme de fonctionner ?
OriginalL'auteur Noob | 2009-11-14
Vous devez vous connecter pour publier un commentaire.
Une méthode très simple:
Le principal inconvénient de cette est que vous avez de sondage pour les mises à jour. Vous aurez besoin de plate-forme de soutien ou de certains autres lib/cadre pour ce faire sur un événement.
time()
retourne sur l'horloge murale,clock()
retourne processeur en temps.+1 Homme, je m'embrouille par la date/heure des trucs toujours 🙂
clock()
pourrait être utile, aussi... Depuis l'OP est seulement intéressé par le temps écoulé, le mur de temps peut ne pas être nécessaire. En outre, pour les programmes de longue date,time()
peut être influencé par des choses comme NTP dérives, l'heure d'été, les modifications de l'utilisateur, etc... Qui peuvent déstabiliser les résultats.pourquoi avez-vous supprimer votre réponse?
Pour être honnête, je ne suis pas vraiment sûr de la réponse, et Michael a expliqué la différence. Donc, j'ai peut-être l'étude de la bibliothèque mieux si je donne une meilleure réponse. Désolé pour le hors sujet des commentaires.
OriginalL'auteur Michael Burr
Utilisation std::chrono.
Si vous avez seulement besoin d'une résolution de secondes, puis std::steady_clock devrait être suffisant.
Je +1 à votre réponse pour le C++11, mais malheureusement, il ne compile pas sur mon GCC 4.8.4 avec C++11 activé. Ce qui a fonctionné, mais a l'aide de
duration_cast
dans la sortie :std::chrono::duration_cast<std::chrono::duration<float>>(current_time - start_time).count()
.OriginalL'auteur Casper Beyer
Vous vous approchez d'elle vers l'arrière. Au lieu d'avoir une variable que vous avez à vous soucier de la mise à jour à chaque seconde, à initialiser une variable sur le début du programme, à l'heure actuelle, et puis à chaque fois que vous avez besoin de savoir combien de secondes se sont écoulées, vous soustrayez le maintenant de l'heure courante que le temps initial. Beaucoup moins de frais généraux de cette façon, et pas besoin d'infirmière certains timing variable, liée à la mise à jour.
OriginalL'auteur prismofeverything
cela devrait fonctionner correctement sur solaris/unix aussi, il suffit de supprimer win refs
OriginalL'auteur rplusg
Vous avez juste besoin de stocker la date et l'heure du démarrage de l'application. Chaque fois que vous avez besoin pour la durée de votre programme est en cours d'exécution en cours date/heure et de la soustraire à la lors du démarrage de l'application.
OriginalL'auteur LeffeBrune