我想知道是否有一種簡單的方法來獲取原生Android代碼中的當前時間。最佳情況是它可以與System.getTimeMillies()相媲美。我只會使用它來查看某些函數調用需要多長時間,因此以毫秒爲單位的當前時間的長變量對我來說是最佳解決方案。如何在原生Android代碼中獲取當前時間?
提前致謝!
我想知道是否有一種簡單的方法來獲取原生Android代碼中的當前時間。最佳情況是它可以與System.getTimeMillies()相媲美。我只會使用它來查看某些函數調用需要多長時間,因此以毫秒爲單位的當前時間的長變量對我來說是最佳解決方案。如何在原生Android代碼中獲取當前時間?
提前致謝!
對於微秒分辨率,您可以使用gettimeofday()。這使用「掛鐘時間」,當設備睡着時它會繼續前進,但如果網絡更新設備的時鐘則會突然向前或向後移動。
您還可以使用clock_gettime(CLOCK_MONOTONIC)。這使用單調時鐘,它永遠不會向前或向後移動,但在設備休眠時停止計數。
定時器的實際分辨率取決於設備。
這兩個都是POSIX API,而不是Android特定的。
專爲懶人設計,它添加到您的代碼的頂部:
#include <time.h>
// from android samples
/* return current time in milliseconds */
static double now_ms(void) {
struct timespec res;
clock_gettime(CLOCK_REALTIME, &res);
return 1000.0 * res.tv_sec + (double) res.tv_nsec/1e6;
}
這樣稱呼它:
double start = now_ms(); // start time
// YOUR CODE HERE
double end = now_ms(); // finish time
double delta = end - start; // time your code took to exec in ms
另外一個懶惰的,該函數將返回納秒當前時間使用CLOCK_MONOTONIC
#include <time.h>
#define NANOS_IN_SECOND 1000000000
static long currentTimeInNanos() {
struct timespec res;
clock_gettime(CLOCK_MONOTONIC, &res);
return (res.tv_sec * NANOS_IN_SECOND) + res.tv_nsec;
}
CLOCK_BOOTTIME(因爲Linux 2.6.39;特定於Linux)會更好嗎? – 2015-06-01 02:53:18