В операционной системе Linux помимо обычных задержек(sleep) и таймеров, реализованы таймеры высокого разрешения. Таймер и задержки высокого разрешения позволяет измерять временные промежутки с точностью до наносекунд, а так же позволяют приложения «засыпать» на непродолжительное время(в зависимости от конфигурации системы) соизмеримое с несколькими микросекундами.
//=============================================================== // Name : HiTimer.c // Author : D.Falko // Version : 1.0 // Description : High Resolution timer test //===============================================================
// iter*delay должно примерно равняться nsec, узнаем погрешность задержек printf("Number of iterations: %d timer value: %d nsecn", iter, delay); printf("Time elapsed: %ld nsecn", nsec);
return0; }
А теперь подробней о использованных компонентах.
Используемая структура времени определена в <sys/time.h> и выглядят следующим образом:
struct timespec { long tv_sec;/* секунды */ long tv_nsec;/* наносекунды */ };
Далее мы узнаем и выводим на экран точность(разрешение) системных часов, при помощи функции:
int clock_getres(clockid_t clk_id,struct timespec *res);
в структуру struct timespec *res записывается разрешения, указанных в clockid_t clk_id часов.
clockid_t clk_id может быть:
▪
CLOCK_REALTIME: часы реального времени, доступные всем процессам в системе. Часы измеряются в секундах и наносекундах с начала эпохи (то есть 00:00:00 1 января 1970 по Гринвичу). Точность 1/HZ секунд.
▪
CLOCK_MONOTONIC: время непрерывной работы ОС, доступное всем процессам. В Линукс оно измеряются в секундах и наносекундах после загрузки ОС. Точность 1/HZ с. Время в этих часах не может быть изменено каким-либо процессом, по этому рек