Comment obtenir du temps en millisecondes en C++
-
Utilisez la méthode
std::chrono::system_clock::now()
pour obtenir le temps en millisecondes en C++ -
Utilisez la fonction
gettimeofday()
pour obtenir le temps en millisecondes en C++ -
Utilisez la fonction
time()
pour obtenir le temps en millisecondes en C++
Cet article présente plusieurs méthodes C++ pour obtenir du temps en millisecondes.
Utilisez la méthode std::chrono::system_clock::now()
pour obtenir le temps en millisecondes en C++
La classe std::chrono::system_clock
est l’interface en C++ pour obtenir une horloge murale en temps réel à l’échelle du système. La plupart des systèmes utilisent l’heure Unix, qui est représentée par le nombre de secondes écoulées depuis 00:00:00 UTC le 1er janvier 1970 (une date arbitraire), appelée époque Unix. Notez que les secondes intercalaires sont ignorées. Ainsi, le temps Unix n’est pas vraiment une représentation exacte de l’UTC.
Tout d’abord, la méthode now()
est appelée pour retourner le point actuel dans le temps. La méthode suivante appelée est time_since_epoch
pour récupérer le temps entre *this
époque et celle de l’horloge, mais elle retourne un objet de classe std::chrono::duration
. Cet objet doit appeler la méthode count
pour retourner le nombre réel de tics, et le représenter en millisecondes. Le résultat est obtenu en utilisant duration_cast<milliseconds>
.
#include <sys/time.h>
#include <chrono>
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;
using std::chrono::duration_cast;
using std::chrono::milliseconds;
using std::chrono::seconds;
using std::chrono::system_clock;
int main() {
auto millisec_since_epoch =
duration_cast<milliseconds>(system_clock::now().time_since_epoch())
.count();
auto sec_since_epoch =
duration_cast<seconds>(system_clock::now().time_since_epoch()).count();
cout << "seconds since epoch: " << sec_since_epoch << endl;
cout << "milliseconds since epoch: " << millisec_since_epoch << endl;
return EXIT_SUCCESS;
}
Production:
seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389
Utilisez la fonction gettimeofday()
pour obtenir le temps en millisecondes en C++
Le gettimeofday
est la fonction compatible POSIX qui permet de récupérer l’horloge du système. Elle prend une adresse d’objet struct timeval
comme premier argument pour stocker les valeurs de temps. Les valeurs sont tv_sec
représentant le nombre de secondes et tv_usec
comme les microsecondes passées depuis l’époque Unix. gettimeofday
retourne int
valeur 0 pour le succès et -1 pour l’échec de fournir des facilités de traitement des erreurs. Le second argument de la fonction est struct timezone
, mais comme il a été déprécié, vous devriez juste passer un nullptr
. Notez que vous devrez inclure l’en-tête <sys/time.h>
pour la définition de la fonction.
#include <sys/time.h>
#include <chrono>
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;
int main() {
struct timeval time_now {};
gettimeofday(&time_now, nullptr);
time_t msecs_time = (time_now.tv_sec * 1000) + (time_now.tv_usec / 1000);
cout << "seconds since epoch: " << time_now.tv_sec << endl;
cout << "milliseconds since epoch: " << msecs_time << endl << endl;
return EXIT_SUCCESS;
}
Production:
seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389
Utilisez la fonction time()
pour obtenir le temps en millisecondes en C++
Une autre méthode compatible POSIX pour récupérer le temps système en C++ consiste à appeler la fonction time
. La fonction time
prend un argument optionnel de type time_t*
, où la valeur de temps retournée est stockée. Alternativement, on peut utiliser la valeur de retour de la fonction pour la stocker dans la variable déclarée séparément. Dans ce dernier cas, vous pouvez passer nullptr
comme argument. Notez que cet appel ne retourne pas le temps avec la même précision que les appels précédents.
#include <sys/time.h>
#include <chrono>
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;
int main() {
time_t now = time(nullptr);
time_t mnow = now * 1000;
cout << "seconds since epoch: " << now << endl;
cout << "milliseconds since epoch: " << mnow << endl << endl;
return EXIT_SUCCESS;
}
Production:
seconds since epoch: 1603612778
milliseconds since epoch: 1603612778000
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook