我想知道是否有一种简单的方法来获取原生Android代码中的当前时间。最佳地,它可以与System.getTimeMillies()相媲美。我只会用它来查看某些函数调用需要多长时间,所以一个长变量和当前时间(以毫秒为单位)对我来说是最佳解决方案。
提前致谢!
答案 0 :(得分:28)
对于懒惰,请将其添加到代码顶部:
#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
答案 1 :(得分:16)
对于微秒级分辨率,您可以使用gettimeofday()
。这使用“挂钟时间”,它在设备处于睡眠状态时继续前进,但如果网络更新设备的时钟,则会突然向前或向后移动。
您也可以使用clock_gettime(CLOCK_MONOTONIC)
。这使用单调时钟,它不会向前或向后跳跃,但在设备休眠时停止计数。
定时器的实际分辨率取决于设备。
这两个都是POSIX API,而不是特定于Android的。
答案 2 :(得分:4)
另一个懒惰的函数,此函数使用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;
}