chrono steady_clock没有给出正确的结果
chrono steady_clock not giving correct result?
我的应用程序服务器代码中有一行代码,它使用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
,这是一个表示系统时间(即操作系统的时间(的时钟。它非常适合报时,但对于测量差异来说却非常无用,因为它不能保证是单调的,而且几乎肯定没有夏令时、用户调整时钟以及其他可能改变现实世界时间的事件。
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- C++Brute Force攻击函数不会返回结果
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 算术运算的结果类似于:C浮点变量中的1/3
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 密码登录程序将永远循环并显示不正确的结果
- 如何让C++'tally up'结果并制定计划?
- 为什么这个程序的结果是3 "born"?和 4 死
- 尝试将字符串/字符转换为整数会产生意外结果