我的应用程序服务器代码中有一行代码,它使用以下命令获取时间戳值steady_clock
如下所示:
uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
现在我们有两个正在运行的系统机器Ubuntu 12 (gcc 4.6.3 compiler)
和正在运行的 machineBUbuntu 14 (gcc 4.8.2 compiler)
.
现在我们使用 make on 编译我们的应用程序服务器代码another Ubuntu 12 VM (which has 4.7.3 compiler)
然后将生成的 tar 文件复制到 machineA 并启动我们的应用程序服务器。启动后,上面这行代码在 machineA 中打印出如下值:
1439944652967
现在我们还使用 make on 编译相同的应用程序服务器代码another Ubuntu 14 VM (which has 4.8.2 compiler)
然后将生成的 tar 文件复制到 machineB 并启动我们的应用程序服务器。启动后,上面这行代码在 machineB 中打印出如下值:
10011360
你看到区别了吗?我很困惑为什么会出现这种差异,我无法理解这一点?所有的代码和一切都是一样的。有人对此有任何解释吗?我该如何解决它?
如果需要的话,我可以尝试添加一些调试代码来看看出了什么问题,从而找出这个问题。
恐怕大家对什么有些困惑std::steady_clock
is.
time_since_epoch
给出自时钟开始以来的持续时间,不一定是 Unix 纪元。steady_clock
只保证单调递增。这意味着steady_clock
永远向前,永远不会减少。
无法保证steady_clock
代表任何有意义的事情。它可以是自程序开始执行以来的持续时间、计算机已打开的持续时间、自最近星期二以来的持续时间,或者几乎任何时间,只要它继续前进即可。
换句话说,steady_clock
实际上对于告诉现实世界时间并没有那么有用。它仅对测量时间的流逝有用。它的用途可能包括您有时间点 A 和时间点 B 并且您对它们之间的持续时间感到好奇的任何情况:基准测试、进度估计等。
如果你正在寻找对于现实世界的时间,你应该看看std::system_clock
,代表系统时间(即操作系统时间)的时钟。它对于告诉时间很有用,但对于测量差异来说几乎没有用,因为它不能保证是单调的,并且几乎肯定没有夏令时、用户调整时钟以及其他可能改变现实世界时间的事件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)