Если вы хотите быть уверены в временном интервале, не касающемся текущей даты / времени, вы должны использовать этот вызов:
struct timespec tim;
uint64_t микросекунд;
clock_gettime (CLOCK_MONOTONIC, & tim);
микросекунд = 1000000ULL * tim.tv_sec + tim.tv_nsec / 1000;
Это время работы вашей системы, реальное полное аппаратное время (не может быть изменено).
О вашей периодической программе вы можете установить периодический обработчик с помощью alarm () и setitimer ().