Как узнать текущее время в родном коде Android?

Может быть, только один работник ждет, пока условие станет истинным.

Если два или более рабочих бодрствуют (notifyAll), они должны снова проверить это условие. в противном случае все работники продолжали бы работать, хотя могут быть только данные для одного из них.

23
задан Pandoro 30 September 2010 в 15:24
поделиться

3 ответа

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

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

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

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

16
ответ дан fadden 30 September 2010 в 15:24
поделиться

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

#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
28
ответ дан torger 30 September 2010 в 15:24
поделиться

Еще одна для ленивых, эта функция возвращает текущее время в наносекундах, используя 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;
}
4
ответ дан donturner 30 September 2010 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: