我想知道两个事件发生之间耗时。
现在,简单的方法是使用类似的东西:
time_t x, y;
x = time(NULL);
/* Some other stuff happens */
y = time(NULL);
printf("Time passed: %i", y-x);
但是,这两个事件之间的系统时间可能会发生变化。
有没有其他方法可以知道两个事件之间耗时?或者有没有办法检测系统时间的变化?
最佳答案
因为你显然在 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
。
关于c - 处理系统时间变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1819542/