Android ndk 如何在原生Android代码中获取当前时间?

Android ndk 如何在原生Android代码中获取当前时间?,android-ndk,Android Ndk,我想知道是否有一种简单的方法可以用原生Android代码获取当前时间。最佳情况下,它可以与System.getTimeMillies()相媲美。我将只使用它来查看某些函数调用需要多长时间,因此当前时间(以毫秒为单位)的长变量将是我的最佳解决方案 提前谢谢 对于微秒分辨率,可以使用gettimeofday()。这使用了“挂钟时间”,当设备处于睡眠状态时,挂钟时间会继续提前,但如果网络更新设备的时钟,则会突然向前或向后移动 您还可以使用clock\u gettime(clock\u MONOTONI

我想知道是否有一种简单的方法可以用原生Android代码获取当前时间。最佳情况下,它可以与System.getTimeMillies()相媲美。我将只使用它来查看某些函数调用需要多长时间,因此当前时间(以毫秒为单位)的长变量将是我的最佳解决方案


提前谢谢

对于微秒分辨率,可以使用
gettimeofday()
。这使用了“挂钟时间”,当设备处于睡眠状态时,挂钟时间会继续提前,但如果网络更新设备的时钟,则会突然向前或向后移动

您还可以使用
clock\u gettime(clock\u 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;

}

另一个用于懒惰者,此函数使用
CLOCK\u 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;
}
#包括
#以秒100000000定义纳米级
静态长currentTimeInNanos(){
结构timespecres;
时钟获取时间(时钟单调,&res);
返回(分辨率电视秒*纳米秒)+分辨率电视秒;
}

CLOCK\u引导时间(因为Linux 2.6.39;特定于Linux)会更好吗?请记住,
CLOCK\u REALTIME
不是单调的,如果您需要不递减的时间,请使用
CLOCK\u monotonic
。我不相信单调的时钟保证以任何特定的值开始,依赖
long
的大小是不明智的。如果要将
时间乘以1e9,则应使用显式64位类型(例如
int64\t
)来转换
tv\u sec
,并作为返回值。
#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;
}