请考虑以下代码段:
#include <chrono>
#include <cassert>
int main()
{
auto result1 = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::high_resolution_clock::now().time_since_epoch());
auto result2 = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch());
assert((result2.count() - result1.count()) < 10);
}
我希望两个值之间的计数差异应该是最小的(理想情况下小于一秒)。但是对于VS2015,计数的差异大约是数十亿秒。这怎么可能?
答案 0 :(得分:7)
它为你断言的原因是因为high_resolution_clock
被允许(并且经常)具有与system_clock
不同的纪元。
事实标准(未指定但可移植)system_clock
的纪元正在测量自1970-01-01 00:00:00 UTC以来的时间,忽略了闰秒。
high_resolution_clock
没有事实上的标准。在gcc high_resolution_clock
上是system_clock
的typedef,在gcc平台上,你会注意到完美的同步。在VS和libc ++ high_resolution_clock
上是steady_clock
的typedef。
对我来说,steady_clock
的时代就是计算机启动的时间。
Here is a video tutorial for <chrono>
.它涵盖了很多问题,包括这个问题,大约一个小时。