Ответ 1
Вы можете использовать CLOCK_MONOTONIC, например. в C:
struct timespec ts;
if(clock_gettime(CLOCK_MONOTONIC,&ts) != 0) {
//error
}
См. этот вопрос для пути Python - Как получить монотонные длительности времени в python?
Я ищу эквивалент GetTickCount()
в Linux.
В настоящее время я использую Python time.time()
, который предположительно вызывает gettimeofday()
. Меня беспокоит, что время, возвращенное (эпоха unix), может изменяться с ошибкой, если часы запутаны, например, NTP. Достаточно простое время работы системы или системы, которое только увеличивается положительно с постоянной скоростью.
Существует ли такая функция времени в C или Python?
Вы можете использовать CLOCK_MONOTONIC, например. в C:
struct timespec ts;
if(clock_gettime(CLOCK_MONOTONIC,&ts) != 0) {
//error
}
См. этот вопрос для пути Python - Как получить монотонные длительности времени в python?
Это работает:
#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() Является основой моих приложений. Состоит из одного конечного автомата для каждой "задачи", например, может выполнять многозадачность без использования потоков и Inter Process Communication Может реализовывать неблокирующие задержки.
Вы должны использовать: clock_gettime(CLOCK_MONOTONIC, &tp);
. Этот вызов не зависит от настройки системного времени, как GetTickCount() в Windows.
Да, ядро имеет таймеры с высоким разрешением, но это по-другому. Я бы рекомендовал вам взглянуть на источники любого нечетного проекта, который переносит это переносимым образом.
Из C/С++ я обычно #ifdef
это и использую gettimeofday()
в Linux, что дает мне разрешение в микросекундах. Я часто добавляю это как часть к секундам, так как эпоха, которую я также получаю, дает мне двойной.