Поскольку вы, очевидно, работаете в Linux, вы можете использовать часы POSIX CLOCK_MONOTONIC, чтобы получить таймер, который не зависит от изменений системного времени:
struct timespec ts1, ts2;
clock_gettime(CLOCK_MONOTONIC, &ts1);
/* Things happen */
clock_gettime(CLOCK_MONOTONIC, &ts2);
ts2.tv_sec -= ts1.tv_sec;
ts2.tv_nsec -= ts1.tv_nsec;
if (ts2.tv_nsec < 0)
{
ts2.tv_nsec += 1000000000L;
ts2.tv_sec -= 1;
}
printf("Elapsed time: %lld.%09lds\n", (long long)ts2.tv_sec, ts2.tv_nsec);
Чтобы проверить, поддерживает ли система CLOCK_MONOTONIC, проверьте sysconf(_SC_MONOTONIC_CLOCK) > 0
.