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

Aru*_*run 1 c++ c++11 c++-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);
}
Run Code Online (Sandbox Code Playgroud)

我期待两个值之间的计数差异应该是最小的(理想情况下小于一秒).但是对于VS2015,计数的差异大约为数十亿秒.这怎么可能?

How*_*ant 7

它为你主张的原因是因为high_resolution_clock允许(并且经常)有不同的时代system_clock.

它是事实上的标准(未指定但是便携式),其system_clock时代是测量自1970-01-01 00:00:00 UTC以来的时间,忽略了闰秒.

没有事实上的标准high_resolution_clock.在gcc上high_resolution_clock是一个typedef system_clock,等等在gcc平台上,你会注意到完美的同步.在VS和libc ++上high_resolution_clock是一个typedef steady_clock.

对我来说,时代steady_clock就是电脑启动的时代.

这是一个视频教程<chrono>. 它涵盖了许多问题,包括这个问题,大约一个小时.