Как распечатать текущее системное время с точностью до микросекунды (или, лучше, наносекундой)? Мне нужно, чтобы это время было согласованным между всеми системными процессорами. Если это невозможно, я хочу, чтобы он был согласован между всеми процессорными ядрами.
Я пробовал clock_gettime(CLOCK_REALTIME
но я подозреваю, что он дает разные результаты, по крайней мере, при работе на разных процессорах.
Звучит для меня то, что вы действительно хотите, это CLOCK_MONOTONIC_RAW
(или просто CLOCK_MONOTONIC
). Сырые часы измеряют время, начинающееся с фиксированной точки, и запрашивают чистые аппаратные часы. В Linux это фиксированное время - это время запуска. Изменения в системном времени не влияют на эти часы (лето/зима и т.д.)
Вы можете проверить разрешение часов в вашей системе с вызовом clock_getres(clockid_t clk_id, struct timespec *res);
Как gettime
и getres
используют структуру timespec, которая содержит два целых числа: секунды и наносекунды. Таким образом, программное обеспечение есть, вам просто нужны (аппаратные) часы, способные обеспечить разрешение наносекунды.
Человеческие страницы двух функций:
http://man7.org/linux/man-pages/man2/clock_gettime.2.html и http://linux.die.net/man/3/clock_gettime
Если у вас есть доступ к книге "Интерфейс программирования Linux" Майкла Керриска, посмотрите главу 23 параграфа 5 (часы POSIX). Когда дело доходит до базового программирования Linux, эта книга дала мне больше ответов, чем даже StackOverflow!
std::chrono::high_resolution_clock