繁体   English   中英

Android上的C ++ 11 std :: chrono :: steady_clock问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM