处理系统时间变化

Joh*_*han 2 c linux

我想知道两个事件发生之间的时间.

现在,简单的方法是使用类似的东西:

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)

但是,系统时间可能会在这两个事件之间发生变化.

有没有另一种方法可以知道两个事件之间的时间?或者有没有办法检测系统时间的变化?

caf*_*caf 6

由于您显然是在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.