Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::chrono::系统时钟与std::chrono::高分辨率时钟行为_C++_C++11_Chrono - Fatal编程技术网

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])。[示例:
sys­seconds{sys­days{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
vs
1491565092