Comment obtenir du temps en millisecondes en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la méthode std::chrono::system_clock::now() pour obtenir le temps en millisecondes en C++
  2. Utilisez la fonction gettimeofday() pour obtenir le temps en millisecondes en C++
  3. Utilisez la fonction time() pour obtenir le temps en millisecondes en C++
Comment obtenir du 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
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - C++ Time