Есть ли способ измерить прошедшее время в Linux / Unix без использования системных часов?
Проблема заключается в том, что системные часы изменяются в некоторых ситуациях, а прошедшее время измеряется time
или же gettimeofday
или что-то еще, что дает неправильный результат.
Я думаю о создании отдельного потока, который выполняет цикл с sleep(100)
внутри и считает количество повторений.
Есть ли лучшие решения?
Используйте монотонное время, которое представляет время с некоторой точки: 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;
}
станд :: хроно :: steady_clock может использоваться для измерения времени и учитывает изменения системных часов.
Измерение прошедшего времени с sleep
(или варианты) это плохая идея. Ваш поток может проснуться в любое время после истекшего времени ожидания, так что это точно будет неточным.
Для временной задержки вы можете использовать, например, select
.