Подтвердить что ты не робот

Как получить текущее время в собственном коде Android?

Мне было интересно, есть ли простой способ получить текущее время в собственном коде Android. Оптимально это было бы нечто сопоставимое с System.getTimeMillies(). Я буду использовать его только для того, чтобы увидеть, как долго будут выполняться определенные вызовы функций, поэтому для меня было бы оптимальной для меня длинной переменной с текущим временем в миллисекундах.

Спасибо заранее!

4b9b3361

Ответ 1

Для разрешения микросекунды вы можете использовать gettimeofday(). Это использует "время настенных часов", которое продолжает развиваться, когда устройство спит, но подвержено внезапным сдвигам вперед или назад, если сеть обновляет часы устройства.

Вы также можете использовать clock_gettime (CLOCK_MONOTONIC). Это использует монотонные часы, которые никогда не прыгают вперед или назад, но прекращают отсчет, когда устройство спит.

Фактическое разрешение таймеров зависит от устройства.

Оба они являются API-интерфейсами POSIX, а не Android-специфическими.

Ответ 2

Для ленивых добавьте это в начало своего кода:

#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

Ответ 3

Другой для лени, эта функция возвращает текущее время в наносекундах, используя 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;
}