std :: chrono :: system_clock vs std :: chrono :: high_resolution_clock行为

时间:2017-04-07 11:09:59

标签: c++ c++11 chrono

请考虑以下代码段:

#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,计数的差异大约是数十亿秒。这怎么可能?

1 个答案:

答案 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>.它涵盖了很多问题,包括这个问题,大约一个小时。