use*_*349 7 c++ ubuntu gcc c++-chrono
我的app服务器代码中有一行代码,它使用steady_clock如下所示的时间戳值:
uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
Run Code Online (Sandbox Code Playgroud)
现在我们有两个正在运行的Ubuntu 12 (gcc 4.6.3 compiler)systemA 机器和正在运行的machineB Ubuntu 14 (gcc 4.8.2 compiler).
现在我们使用另一个 make编译我们的app服务器代码Ubuntu 12 VM (which has 4.7.3 compiler),然后将生成的tar文件复制到machineA并启动我们的app服务器.在开始之后,上面的代码行在machineA中打印出如下值:
1439944652967
Run Code Online (Sandbox Code Playgroud)
现在我们还使用另一个 make编译相同的应用服务器代码Ubuntu 14 VM (which has 4.8.2 compiler),然后将生成的tar文件复制到machineB并启动我们的app服务器.在开始之后,上面的代码行在machineB中打印出这样的值:
10011360
Run Code Online (Sandbox Code Playgroud)
你看到差异吧?我很困惑为什么这是差异,我无法理解这一点?所有代码和一切都是一样的.有没有人对此有任何解释,我该如何解决?
如果需要,我可以尝试添加一些调试代码,看看弄清楚这个问题有什么不对.
Cor*_*bin 13
我担心什么std::steady_clock是混淆.
time_since_epoch给出了自时钟开始以来的持续时间,不一定是Unix时代.steady_clock只保证单调增加.这意味着steady_clock将永远向前发展,永远不会减少.
无法保证steady_clock代表任何有意义的东西.它可以是自程序执行开始以来的持续时间,计算机打开的持续时间,自最近的星期二以来的持续时间,或者只要它继续向前移动的几乎任何东西.
换句话说,steady_clock说实际世界时间实际上并不是那么有用.它只对测量时间的流逝有用.它的用途可能包括您有时间点A和时间点B的任何情况,并且您对它们之间的持续时间感到好奇:基准测试,进度估算等.
如果你正在寻找现实世界的时间,你应该研究std::system_clock一个代表系统时间的时钟(即操作系统的时间).它非常适合讲述时间,但它对于测量差异非常无用,因为它不能保证单调,几乎肯定没有夏令时,用户调整时钟,以及其他可以改变现实世界时间的事件.
| 归档时间: |
|
| 查看次数: |
1804 次 |
| 最近记录: |