Как узнать текущее время в родном коде Android? - PullRequest
23 голосов
/ 30 сентября 2010

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

Заранее спасибо!

Ответы [ 3 ]

28 голосов
/ 14 января 2013

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

#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
16 голосов
/ 01 октября 2010

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

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

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

Оба эти API-интерфейса POSIX, а не для Android.

4 голосов
/ 21 марта 2017

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