gpt4 book ai didi

c++ - chrono steady_clock 没有给出正确的结果?

转载 作者:可可西里 更新时间:2023-11-01 18:19:56 30 4
gpt4 key购买 nike

我的应用服务器代码中有一行代码使用 steady_clock 获取时间戳值,如下所示:

uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();

现在我们有两个运行 Ubuntu 12(gcc 4.6.3 编译器) 的系统 machineA 和运行 Ubuntu 14(gcc 4.8.2 编译器) 的 machineB。

现在我们在另一个 Ubuntu 12 VM(具有 4.7.3 编译器) 上使用 make 编译我们的应用程序服务器代码,然后将生成的 tar 文件复制到 machineA并启动我们的应用服务器。启动后,上面这行代码在 machineA 中打印出这样的值:

1439944652967

现在我们还在 另一个 Ubuntu 14 VM(具有 4.8.2 编译器) 上使用 make 编译相同的应用服务器代码,然后复制生成的 tar 文件到 machineB 并启动我们的应用程序服务器。启动后,上面这行代码在machineB中打印出这样的值:

10011360 

你看到区别了吗?我很困惑为什么这是不同的,我无法理解这一点?所有的代码和一切都是一样的。有人对此有任何解释吗?我该如何解决?

如果需要,我可以尝试添加一些调试代码以查看问题所在以解决此问题。

最佳答案

恐怕有人对 std::steady_clock 是什么感到困惑。

time_since_epoch 给出自时钟开始以来的持续时间,不一定是 Unix 纪元。 steady_clock 只保证单调递增。这意味着 steady_clock 将始终向前移动并且永远不会减少。

不能保证 steady_clock 代表任何有意义的东西。它可以是自程序开始执行以来的持续时间、计算机已打开的持续时间、自最近的星期二以来的持续时间,或者几乎任何只要它继续前进的时间。

换句话说,steady_clock 实际上对于告诉现实世界时间并不是那么有用。它只对衡量时间的流逝有用。它的用途可能包括您有时间点 A 和时间点 B 并且您对它们之间的持续时间感到好奇的任何情况:基准测试、进度估算等。

如果您正在寻找真实世界时间,您应该查看std::system_clock,一个代表系统时间的时钟(即操作系统的时间)。它非常适合用来报时,但对于测量时差来说却毫无用处,因为它不能保证是单调的,而且几乎肯定不会考虑夏令时、用户调整时钟以及其他可能改变现实世界时间的事件。

关于c++ - chrono steady_clock 没有给出正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085871/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com