Cómo obtener el tiempo en milisegundos en C++

Jinku Hu 12 octubre 2023
  1. Utiliza el std::chrono::system_clock::now() Método para obtener el tiempo en milisegundos en C++
  2. Usa la función gettimeofday() para obtener el tiempo en milisegundos en C++
  3. Usa la función time() para obtener el tiempo en milisegundos en C++
Cómo obtener el tiempo en milisegundos en C++

Este artículo presentará múltiples métodos de C++ sobre cómo obtener el tiempo en milisegundos.

Utiliza el std::chrono::system_clock::now() Método para obtener el tiempo en milisegundos en C++

La clase std::chrono::system_clock es la interfaz en C++ para obtener el reloj de pared en tiempo real de todo el sistema. La mayoría de los sistemas utilizan la hora de Unix, que se representa como los segundos transcurridos desde las 00:00:00 UTC del 1 de enero de 1970 (una fecha arbitraria), llamada época Unix. Nótese que los segundos bisiestos son ignorados. Por lo tanto, la hora Unix no es realmente una representación exacta de la UTC.

En primer lugar, se llama al método now() para devolver el punto actual en el tiempo. El siguiente método llamado es time_since_epoch para recuperar la cantidad de tiempo entre *this y la época del reloj, pero devuelve un objeto de clase std::chrono::duration. Este objeto debe llamar al método count para devolver el número real de ticks, y representarlo en milisegundos. El resultado se moldea usando 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;
}

Resultado:

seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389

Usa la función gettimeofday() para obtener el tiempo en milisegundos en C++

gettimeofday es la función compatible con POSIX para recuperar el reloj del sistema. Toma una dirección del objeto struct timeval como primer argumento para almacenar los valores de tiempo. Los valores son tv_sec representando el número de segundos y tv_usec como microsegundos pasados desde la época de Unix. gettimeofday devuelve el valor int 0 para el éxito y -1 para el fracaso en el manejo de errores. El segundo argumento de la función es struct timezone, pero como se ha depreciado, sólo debes pasar un nullptr. Ten en cuenta que tendrías que incluir el encabezado <sys/time.h> para la definición de la función.

#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;
}

Resultado:

seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389

Usa la función time() para obtener el tiempo en milisegundos en C++

Otro método compatible con POSIX para recuperar la hora del sistema en C++ es llamar a la función time. time toma un argumento opcional del tipo time_t*, donde se almacena el valor de tiempo devuelto. Alternativamente, se puede usar el valor de retorno de la función para almacenar en la variable declarada por separado. En este último caso, se puede pasar nullptr como argumento. Observa que esta llamada no devuelve el tiempo con la misma precisión que las llamadas anteriores.

#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;
}

Resultado:

seconds since epoch: 1603612778
milliseconds since epoch: 1603612778000
Autor: 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

Artículo relacionado - C++ Time