NDK 获得精确时间模拟System.nanoTime()

29 篇文章 1 订阅

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周期运算在多任务的情况下,难以准确计算时钟周期分配的消耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值