Как получить текущее время в собственном коде Android?
Мне было интересно, есть ли простой способ получить текущее время в собственном коде Android. Оптимально это было бы нечто сопоставимое с System.getTimeMillies(). Я буду использовать его только для того, чтобы увидеть, как долго будут выполняться определенные вызовы функций, поэтому для меня было бы оптимальной для меня длинной переменной с текущим временем в миллисекундах.
Спасибо заранее!
Ответы
Ответ 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;
}