有没有办法在不使用系统时钟的情况下测量 linux/unix 中的经过时间?问题是系统时钟在某些情况下会发生变化,并且由time
或gettimeofday
其他类似的东西测量的经过时间会给出不正确的结果。
我正在考虑创建单独的线程,该线程在sleep(100)
内部执行循环并计算重复次数。
有更好的解决方案吗?
有没有办法在不使用系统时钟的情况下测量 linux/unix 中的经过时间?问题是系统时钟在某些情况下会发生变化,并且由time
或gettimeofday
其他类似的东西测量的经过时间会给出不正确的结果。
我正在考虑创建单独的线程,该线程在sleep(100)
内部执行循环并计算重复次数。
有更好的解决方案吗?
std::chrono::steady_clock可用于测量时间,并考虑系统时钟的变化。
使用单调时间,表示从某个时间点开始的时间:http: //linux.die.net/man/3/clock_gettime
int64_t get_monotonic_timestamp(void)
{
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return (int64_t)ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
}
用(或变体)测量经过的时间sleep
是一个坏主意。您的线程可以在经过睡眠时间后随时唤醒,因此这肯定是不准确的。
对于时间延迟,您可以使用例如select
.