Измерение времени без использования системных часов

Есть ли способ измерить прошедшее время в Linux / Unix без использования системных часов?
Проблема заключается в том, что системные часы изменяются в некоторых ситуациях, а прошедшее время измеряется time или же gettimeofday или что-то еще, что дает неправильный результат.

Я думаю о создании отдельного потока, который выполняет цикл с sleep(100) внутри и считает количество повторений.

Есть ли лучшие решения?

1

Решение

Используйте монотонное время, которое представляет время с некоторой точки: http://linux.die.net/man/3/clock_gettime

int64_t get_monotonic_timestamp(void)
{
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return (int64_t)ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
}
4

Другие решения

станд :: хроно :: steady_clock может использоваться для измерения времени и учитывает изменения системных часов.

6

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

2

Для временной задержки вы можете использовать, например, select.

1
По вопросам рекламы [email protected]