NDK 提供了POSIX:
extern int clock_gettime(int, struct timespec *)
函数的调用,这是libc的一部分。
简单介绍一下 ,第一个参数,是一个枚举类型有如下类型:
// 这个表示系统真实时间,会在更新系统时间的时候数字前后跳动,设备休眠继续计算
#define CLOCK_REALTIME 0
// 这是个相对过去时间间隔,比较稳定,不会受到系统更新时间影响,设备休眠停止
#define CLOCK_MONOTONIC 1
#define CLOCK_PROCESS_CPUTIME_ID 2 // 没查
#define CLOCK_THREAD_CPUTIME_ID 3 // 没查
#define CLOCK_REALTIME_HR 4 // 没查
#define CLOCK_MONOTONIC_HR 5 // 没查
获取时间结构:
struct timespec {
time_t tv_sec; // 距离过去时间的秒
long tv_nsec; // 距离过去时间的纳秒,就是1秒的10的-9次方
};
如此我们就可模拟System.nanoTime()函数的计算了:
struct timespec now;
clock_gettime(CLOCK_MONOTONIC, &now);
return now.tv_sec * 1000000000LL + now.tv_nsec;
不过经过测试,发现不是很稳定,可能是因为cpu周期运算在多任务的情况下,难以准确计算时钟周期分配的消耗。