2017-04-07 46 views
1

考虑下面的代码片段:的std ::时辰:: SYSTEM_CLOCK VS的std ::时辰:: high_resolution_clock行为

#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

你需要包括 Arun

+0

**你的代码无效**一个有效的演员:'std :: chrono :: duration_cast (你的时间)' –

回答

4

它声称给你的原因是因为high_resolution_clock被允许(并且经常)具有与system_clock不同的时期。

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

high_resolution_clock没有事实上的标准。在gcc high_resolution_clock是一个system_clock的类型定义,所以在gcc平台上,你会发现完美的同步。在VS和libC++上high_resolution_clocksteady_clock的typedef。

对于我来说,steady_clock的时代就是计算机启动的时候。

Here is a video tutorial for <chrono>.它涵盖了很多问题,包括这一个,大约一个小时。

相关问题