c - 处理系统时间变化

标签 c linux

我想知道两个事件发生之间耗时。

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

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/

相关文章:

c - 如何理解程序

c# - 如何从 C# 程序中检索 WMI 数据(例如 UUID)?

c - 用c编写一个程序,统计文件中的总字数

java - 基本 javafx 应用程序中由 NullPointer 引起的 InvocationTargetException

objective-c - 我可以创建只对我的类可见的 C 函数,它被分成多个文件吗?

使用 ulimit 命令更改堆栈上的软限制

c++ - Linux 共享库链接错误( undefined symbol )

linux - 将项目添加到启动脚本并以特定用户身份运行?

c# - 在 Mono 3 (Ubuntu 12.10) 上使用 WinForms

linux - 查找包含非打印字符(空字节)的文件