Библиотеки реального времени posix лучше подходят для измерения интервалов высокой точности.Вы действительно не хотите знать текущее время.Вы просто хотите знать, сколько времени прошло между двумя точками.Вот для чего нужны монотонные часы.
struct timespec begin;
clock_gettime( CLOCK_MONOTONIC, &begin );
{
// Experiment!
}
struct timespec end;
clock_gettime(CLOCK_MONOTONIC, &end );
// Print the time it took!
std::cout << "Time: " << double(end.tv_sec - begin.tv_sec) + (end.tv_nsec - begin.tv_nsec)/1000000000.0 << std::endl;
При ссылке необходимо добавить -lrt
.
Использование монотонных часов имеет ряд преимуществ.Он часто использует аппаратные таймеры (Гц кристалл или что-то в этом роде), поэтому это часто более быстрый вызов, чем gettimeofday()
.Также гарантируется, что монотонные таймеры никогда не пойдут назад, даже если ntpd или пользователь тратят время на системное время.