chrono steady_clock没有给出正确的结果

chrono steady_clock not giving correct result?

本文关键字:结果 steady clock chrono      更新时间:2023-10-16

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

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

现在我们有两个系统,机器A运行Ubuntu 12 (gcc 4.6.3 compiler),机器B运行Ubuntu 14 (gcc 4.8.2 compiler)

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

1439944652967

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

10011360 

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

如果需要,我可以尝试添加一些调试代码,看看哪里出了问题,以解决这个问题。

恐怕大家对std::steady_clock是什么有些困惑。

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

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

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

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