其中计时功能,time,clock getrusage,clock_gettime,gettimeofday和timespec_get,我想清楚地了解它们是如何实现的,为了知道在什么情况下我必须使用他们什么是他们的返回值。
time
clock
getrusage
clock_gettime
gettimeofday
timespec_get
首先,我们需要对返回 壁钟值的 函数与返回 进程或线程值的 函数进行分类。gettimeofday返回壁钟值,clock_gettime返回壁钟值 或 进程或线程值,具体取决于Clock传递给它的参数。getrusage并clock返回过程值。
Clock
然后,第二个问题涉及这些功能的实现以及结果的准确性。这些功能使用哪种硬件或软件机制。
似乎getrusage仅使用内核滴答(通常为1ms),结果比ms更准确。这样对吗?然后,该getimeofday功能似乎使用了最准确的基础硬件。因此,其精度在最近的硬件上通常为微秒(由于API而不能更高)。关于什么的clock,关于“逼近”该名男子页讲,这是什么意思?怎么回事clock_gettime,API只需十亿分之一秒,是否意味着如果底层硬件允许的话,它就能如此精确?单调呢?
getimeofday
还有其他功能吗?
问题是在C和C ++中有几种不同的时间函数可用,其中一些在实现之间的行为也有所不同。也有很多半答案。编译时钟函数及其属性的列表将正确回答该问题。首先,让我们问一下我们要寻找的相关属性是什么。查看您的帖子,我建议:
在开始列出之前,我想指出壁钟时间很少是正确的使用时间,但是它会随着时区的变化,夏时制的变化或壁钟是由NTP同步而变化的。如果您花时间安排事件或基准性能,那么这些事情都不是一件好事。顾名思义,这真的非常有用,因为它可以挂在墙上(或台式机)上。
到目前为止,这是我在Linux和OS X中发现的时钟:
time()
clock()
man clock
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...)
clock_gettime(CLOCK_MONOTONIC, ...)
CLOCK_MONOTONIC
getrusage()
gettimeofday()
clock_gettime()
mach_absolute_time()
除另有说明外,以上所有内容都存在于Linux和OS X中。上面的“我的系统”是一台运行Mac X且带有GCC 4.7.2的OS X 10.8.3的Apple。
最后,除了上面的链接之外,这是我发现有用的参考文献列表:
更新 :自OS clock_gettime10.10(Sierra)起已实现。同样,基于POSIX和BSD的平台(如OS X)都共享rusage.ru_utimestruct字段。
rusage.ru_utime