С++ 11 как распечатать часы с высоким разрешением time_point
Как распечатать time_point, когда time_point получен из high_resolution_clock?
timestamp = std::chrono::high_resolution_clock::now();
std::time_t now = std::chrono::system_clock::to_time_t(timestamp);
std::cout << std::ctime(&now) << std::endl;
При компиляции я получаю следующее сообщение об ошибке:
error: no viable conversion from 'time_point<class std::__1::chrono::steady_clock, duration<[...], ratio<[...], 1000000000>>>' to 'const time_point<class std::__1::chrono::system_clock, duration<[...], ratio<[...], 1000000>>>'
time_t tt = std::chrono::system_clock::to_time_t(timestamp);
Ответы
Ответ 1
Нет истинного изящного способа сделать это. high_resolution_clock
, как известно, не связано с UTC или любым другим календарем. Единственное, что вы можете сделать, это вывести его текущую продолжительность с неопределенной эпохи вместе с единицами этой продолжительности:
#include <chrono>
#include <iostream>
int
main()
{
using Clock = std::chrono::high_resolution_clock;
constexpr auto num = Clock::period::num;
constexpr auto den = Clock::period::den;
std::cout << Clock::now().time_since_epoch().count()
<< " [" << num << '/' << den << "] units since epoch\n";
}
Какие для меня выходы:
516583779589531 [1/1000000000] units since epoch
что означает, что это 516583779589531 наносекунды (или 516,583.779589531 секунд) с эпохи этих часов на моей машине. На моей машине это переводится на: моя машина была загружена почти на 6 дней. Но этот перевод не переносится.
Ах! И из вашего сообщения об ошибке вы указываете, что используете libС++. Если вы также находитесь в OS X, то у нас есть то же определение high_resolution_clock
: он подсчитывает наносекунды с момента загрузки вашего компьютера.
Ответ 2
По крайней мере, когда я читаю вещи, цель состоит в том, что std::high_resolution_clock
можно определить как обертку вокруг чего-то вроде счетчика штампа времени процессора, который просто представляет собой регистр, который увеличивает каждый тактовый такт процессора.
Это не обязательно случай (и с текущими системами, постоянно изменяющими частоту процессора, вероятно, плохая идея), но также должны поддерживаться другие аналогичные часы.
Нижняя строка: не может быть известной взаимосвязи между абсолютным временем и часами с высоким разрешением, поэтому она действительно определяется только для создания продолжительности, а не абсолютного времени.