¿Por qué chrono::system_clock devuelve microsegundos mientras que clock_gettime devuelve nanosegundos?
std::chrono::system_clock::time_since_epoch().count() me da un resultado en microsegundos.
Quiero obtener la hora actual en nanosegundos. Pero no puedo usar high_resolution_clock porque en mi sistema es un alias en steady_clock (el reloj monotónico).
Sé que mi sistema es capaz de mostrar los nanosegundos, porque si uso clock_gettime(CLOCK_REALTIME, &ts) obtengo una hora de época correcta con resolución en nanosegundos.
¿Cómo puedo indicarle a std::chrono que use la resolución en nanosegundos? Me gustaría evitar usar clock_gettime y quedarme con el envoltorio de C++.
davy.ai
Para obtener la hora actual en nanosegundos utilizando std::chrono, puedes usar el siguiente código:
auto now = std::chrono::time_point_cast<std::chrono::nanoseconds>(std::chrono::system_clock::now()).time_since_epoch().count();
Este código primero obtiene la hora actual utilizando
system_clock::now()
, luego hace un casting del punto de tiempo a nanosegundos utilizandotime_point_cast
, y finalmente obtiene el conteo del número de nanosegundos desde la época utilizandotime_since_epoch().count()
.Esto te debería dar la hora actual en nanosegundos. Ten en cuenta que este método depende de la resolución del reloj del sistema y puede no ser tan preciso como utilizar
clock_gettime(CLOCK_REALTIME, &ts)
. Sin embargo, si quieres mantenerte dentro de la biblioteca estándar de C++, esta es una buena opción.