2011-06-15 20 views
4

根據Android Developer ReferenceuptimeMillis()返回自啓動以來的毫秒數,不計算在深度睡眠中花費的時間。我檢查的 uptimeMillis()在我的代碼實現,它大致是這個 -使用CLOCK_MONOTONIC的Android(Linux)正常運行時間

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數線性,包括睡眠時間。

這裏是我的doubts-

  1. 如果CLOCK_MONOTONIC包括睡眠時間,怎麼來uptimeMillis()沒有考慮到這一點?如果我的理解錯誤並且CLOCK_MONOTONIC沒有考慮睡眠,那麼我應該使用什麼來獲得包括睡眠在內的系統正常運行時間?

  2. 什麼是深度睡眠? CPU空閒是否被稱爲深度睡眠?

  3. 在Linux中,未指定點的值是什麼?你能否在代碼中指出這個時鐘開始的地方?當系統被暫停

回答

9
  1. CLOCK_MONOTONIC停止。有些人覺得這是一個錯誤,隨後出現了添加CLOCK_BOOTTIME時鐘的補丁:https://lwn.net/Articles/428176/ 我不知道這些補丁是否已經包含在主線內核中。 CLOCK_BOOTTIME是NDK-9C - 只用了2,5歲;) - 沃伊切赫

  2. 暫停,我猜。

  3. IIRC啓動前的一段固定時間。如果您深入內核源代碼,您會發現確切的值。然後,關於它的整個點是未指定是它可以在任何時候改變,所以依靠它對我來說似乎是不明智的。

+0

非常感謝janneb!這非常有幫助。但你能詳細說明暫停嗎?通過暫停,你的意思是這個過程暫停或整個CPU閒置? – 2011-06-15 16:13:45

+0

@Pavan:暫停,因爲在整個系統中暫停。 – janneb 2011-06-15 16:34:46

+0

再次感謝!我檢查了2.6.35。 'CLOCK_BOOTTIME'還沒有!但是'SystemClock.elapsedRealtime()'仍然可以做到!任何想法,它是如何做的? – 2011-06-15 17:29:17

相關問題