[英]C++11 std::chrono::steady_clock issue on Android
在我为Android平台制作的应用程序中,我一直在使用std :: chrono :: steady_clock进行区间计算。
码:
// On application start
auto timeSinceEpoch = std::chrono::steady_clock::now().time_since_epoch();
auto timeInSec = std::chrono::duration_cast<seconds>(timeSinceEpoch).count();
log("On Enter Start Time Point - %lld", timeInSec);
输出:
On Enter Start Time Point - 521
现在我关掉手机并重启手机。 我运行我的应用程序,这次输出是:
On Enter Start Time Point - 114
根据cppreference.com的定义
“类std :: chrono :: steady_clock代表一个单调时钟。 这个时钟的时间点不会随着物理时间的推移而减少 。”
当我重新启动手机时输出值如何降低?
如果有人遇到过这个问题,请帮帮我。 谢谢!!
对稳定时钟的正式要求是对now()
调用在另一次调用now()
之前发生的结果总是小于或等于第二次调用的结果。 关系之前发生的事情仅适用于程序运行中的操作。 在程序的不同调用中,稳定时钟不需要保持稳定。
在Android上,AFAICT steady_clock与(来自Java)System.Clock.elapsedRealtime相同,在启动时重置为零 - https://developer.android.com/reference/android/os/SystemClock.html
不过,我完全没有挖掘出clock_gettime的源代码。 https://android.googlesource.com/platform/ndk.git/+/43255f3d58b03cd931d29d1ee4e5144e86e875ce/sources/cxx-stl/llvm-libc++/libcxx/src/chrono.cpp#124显示它正在调用clock_gettime(CLOCK_MONOTONIC),但我'我不知道如何从那里穿透面纱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.