C ++ 11 comment imprimer une horloge haute résolution time_point
Comment puis-je imprimer une time_point lorsque le time_point est obtenu à partir de high_resolution_clock?
timestamp = std::chrono::high_resolution_clock::now();
std::time_t now = std::chrono::system_clock::to_time_t(timestamp);
std::cout << std::ctime(&now) << std::endl;
Je reçois le message d'erreur suivant lors de la compilation:
error: no viable conversion from 'time_point<class std::__1::chrono::steady_clock, duration<[...], ratio<[...], 1000000000>>>' to 'const time_point<class std::__1::chrono::system_clock, duration<[...], ratio<[...], 1000000>>>'
time_t tt = std::chrono::system_clock::to_time_t(timestamp);
source d'informationauteur John
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas vraiment de manière élégante pour ce faire.
high_resolution_clock
n'est pas connu pour être lié à l'UTC, ou tout autre calendrier. Une chose que vous pouvez de façon portable n'est sortie de sa durée actuelle de son époque indéterminée, ainsi que les unités de durée:Qui, pour moi, les résultats:
ce qui signifie qu'il est 516583779589531 nanosecondes (ou 516,583.779589531 secondes) depuis l'époque de cette horloge sur ma machine. Sur ma machine, cela se traduit par: mon ordinateur a été démarré depuis près de 6 jours. Mais cette traduction n'est pas portable.
Ah! Et je prends note de votre message d'erreur que vous utilisez libc++. Si vous êtes aussi sur OS X, alors nous avons la même définition de
high_resolution_clock
: Il compte le nombre de nanosecondes depuis votre ordinateur a été démarré.Au moins que j'ai lu des choses, l'intention est que
std::high_resolution_clock
pourrait être défini comme un wrapper autour de quelque chose comme un CPU time-stamp counter, c'est tout simplement un registre qui est incrémenté à chaque cycle d'horloge du PROCESSEUR.Ce n'est pas nécessairement le cas (et avec les systèmes actuels modifie constamment fréquence d'horloge du PROCESSEUR probablement une mauvaise idée), mais d'autres semblables, les horloges sont également destinés à être pris en charge.
Ligne de fond: il peut ne pas être une relation entre l'absolu du temps et de l'horloge haute résolution, il est donc vraiment défini seulement pour produire des durées, pas absolue fois.