使用CLOCK_MONOTONIC的Android(Linux)正常运行时间

根据Android开发人员参考, uptimeMillis()返回自启动以来的毫秒数, 不计算在深度睡眠中花费的时间 。 我检查了我的代码中的uptimeMillis()的实现,它大致是这样的 –

 struct timespec t; t.tv_sec = t.tv_nsec = 0; clock_gettime(CLOCK_MONOTONIC, &t); return (int64_t)(t.tv_sec)*1000000000LL + t.tv_nsec; 

据我所知, CLOCK_MONOTONIC从包括睡眠时间在内的一些非指定的点 CLOCK_MONOTONIC计数。

这是我的怀疑 –

  1. 如果CLOCK_MONOTONIC包含睡眠时间, uptimeMillis()怎么没有考虑到它? 如果我的理解是错误的, CLOCK_MONOTONIC不考虑睡眠,那么我应该使用什么来获得包括睡眠在内的系统正常运行时间?

  2. 什么是深度睡眠? CPU空闲是否被称为深度睡眠?

  3. Linux中未指定点的价值是什么? 你能指出在这个时钟开始的代码吗?

Solutions Collecting From Web of "使用CLOCK_MONOTONIC的Android(Linux)正常运行时间"

  1. CLOCK_MONOTONIC在系统暂停时停止。 有些人觉得这是一个错误,随后又增加了一个CLOCK_BOOTTIME时钟的补丁: https ://lwn.net/Articles/428176/。 我不知道这些补丁是否已经包含在主线内核中。 CLOCK_BOOTTIME在ndk-9c – 只花了2。5年;) – Wojciech

  2. 暂停,我猜。

  3. IIRC开机前的一段时间。 如果您深入内核源代码,您会发现确切的值。 再说,关于这个问题没有具体说明的一点是它可以随时改变,所以依靠它对我来说似乎是不明智的。