Эквивалентно GetTickCount () в Linux - PullRequest
28 голосов
/ 02 июня 2010

Я ищу эквивалент GetTickCount() в Linux.

В настоящее время я использую Python time.time(), который предположительно вызывает gettimeofday(). Меня беспокоит то, что возвращаемое время (эпоха Unix) может изменяться беспорядочно, если часы портятся, например, по NTP. Достаточно простого времени процесса или стенки системы, которое только увеличивается положительно с постоянной скоростью.

Существует ли такая функция времени в C или Python?

Ответы [ 4 ]

27 голосов
/ 02 июня 2010

Вы можете использовать CLOCK_MONOTONIC например в С:

struct timespec ts;
if(clock_gettime(CLOCK_MONOTONIC,&ts) != 0) {
 //error
}

См. Этот вопрос для пути Python - Как мне получить монотонную продолжительность времени в Python?

6 голосов
/ 27 июля 2014

Это похоже на работу:

#include <unistd.h>
#include <time.h>

uint32_t getTick() {
    struct timespec ts;
    unsigned theTick = 0U;
    clock_gettime( CLOCK_REALTIME, &ts );
    theTick  = ts.tv_nsec / 1000000;
    theTick += ts.tv_sec * 1000;
    return theTick;
}

да, get_tick () Является основой моих приложений. Состоит из одного конечного автомата для каждой «задачи» например, может многозадачность без использования потоков и межпроцессного взаимодействия Может реализовать неблокирующие задержки.

5 голосов
/ 02 июня 2010

Вы должны использовать: clock_gettime(CLOCK_MONOTONIC, &tp);. На этот вызов не влияет настройка системного времени, как в GetTickCount () в Windows.

1 голос
/ 02 июня 2010

Да, ядро ​​имеет таймеры высокого разрешения, но это не так. Я бы порекомендовал вам взглянуть на источники любого странного проекта, который переносит это в переносимом виде.

Из C / C ++ я обычно #ifdef это и использую gettimeofday() в Linux, что дает мне микросекундное разрешение. Я часто добавляю это как доли к секундам, начиная с эпохи, которую я также получаю, давая мне двойное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...