处理系统时间变化

时间:2009-11-30 12:30:19

标签: c linux

我想知道两次事件发生之间的时间。

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

time_t x, y;
x = time(NULL);

/* Some other stuff happens */

y = time(NULL);
printf("Time passed: %i", y-x);

但是,可能会在这两个事件之间更改系统时间。

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

2 个答案:

答案 0 :(得分: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);

要检查系统是否支持CLOCK_MONOTONIC,请检查sysconf(_SC_MONOTONIC_CLOCK) > 0

答案 1 :(得分:1)

你可以在Linux上使用clock_gettime()或在其他一些Unix系统上使用gethrtime()。虽然两个这样的值之间的差异给你一个时间间隔,但这些调用并没有给你定时的时间值。正如HP-UX所说的关于gethrtime():

gethrtime()函数返回当前的高分辨率实时。时间表示为自过去一定时间以来的纳秒数。