Cómo obtener el tiempo en milisegundos en C++
-
Utiliza el
std::chrono::system_clock::now()
Método para obtener el tiempo en milisegundos en C++ -
Usa la función
gettimeofday()
para obtener el tiempo en milisegundos en C++ -
Usa la función
time()
para 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
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