我想知道两个事件发生之间的时间.
现在,简单的方法是使用类似的东西:
time_t x, y;
x = time(NULL);
/* Some other stuff happens */
y = time(NULL);
printf("Time passed: %i", y-x);
Run Code Online (Sandbox Code Playgroud)
但是,系统时间可能会在这两个事件之间发生变化.
有没有另一种方法可以知道两个事件之间的时间?或者有没有办法检测系统时间的变化?
由于您显然是在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);
Run Code Online (Sandbox Code Playgroud)
要检查系统是否支持CLOCK_MONOTONIC,请检查sysconf(_SC_MONOTONIC_CLOCK) > 0.