C++ std::chrono::系统时钟与std::chrono::高分辨率时钟行为
考虑以下代码段:C++ std::chrono::系统时钟与std::chrono::高分辨率时钟行为,c++,c++11,chrono,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::duratio
#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);
}
#包括
#包括
int main()
{
auto result1=std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch());
auto result2=std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch());
断言((result2.count()-result1.count())<10);
}
我希望两个值之间的计数差异应该最小(理想情况下小于一秒)。但在VS2015中,计数的差异大约为数十亿秒。这是怎么可能的?它为您断言的原因是
高分辨率时钟
被允许(并且经常)具有与系统时钟
不同的历元
事实上的标准(未指定,但可移植)是系统时钟的历元自1970-01-01 00:00:00 UTC开始测量时间,忽略闰秒1
对于高分辨率时钟
,没有事实上的标准。在gcc上,高分辨率时钟是系统时钟的typedef,在gcc平台上,您会注意到完美的同步。在VS和libc++上,高分辨率时钟是稳定时钟的类型定义
对我来说,稳定时钟的时代是每当计算机启动时
它涵盖了很多问题,包括这一个,大约一个小时长
1系统时钟的实际标准
系统时钟类型的对象表示从
全系统实时时钟。类型为sys\utime
测量自1970-01-01 00:00:00 UTC起的时间,不包括闰秒。
这一措施通常被称为。这一措施
促进系统时间和日历之间的有效映射
类型([time.cal])。[示例:
sysseconds{sysdays{1970y/一月/1日}。自epoch()起的时间为
0s
sys-seconds{sys-days{2000y/一月/1}}。time-since-of-epoch()
是946'684'800s
,它是10'957*86'400s
。
-[结束示例]
如图所示,代码未编译。您需要包含一个有效的强制转换,并且您的代码无效:std::chrono::duration\u cast(您的时间)
使用gcc 6.2.0
时没有错误,在使用g++时得到相同的结果,但在MSVS 2017中得到1806453
vs1491565092