我正在尝试使用以下内容在Linux下使用clock()
来测量C中的执行时间:
#include <time.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char const* argv[])
{
clock_t begin, end;
begin = clock();
sleep(2);
end = clock();
double spent = ((double)(end-begin)) / CLOCKS_PER_SEC;
printf("%ld %ld, spent: %f\n", begin, end, spent);
return 0;
}
输出结果为:
1254 1296, spent: 0.000042
文档说将时钟时间除以CLOCKS_PER_SEC
以获得以秒为单位的执行时间,但对于2秒sleep
来说这似乎是不正确的。
有什么问题?
答案 0 :(得分:2)
睡眠几乎不需要执行时间。该程序只需安排其唤醒,然后让自己入睡。在它睡着的时候,它没有执行。当它被唤醒时,它根本不需要做任何事情。这一切都只需要很短的一秒钟。
没有更多的执行时间来睡得更久。因此,当程序未执行时有2秒的时间这一事实没有效果。
答案 1 :(得分:1)
clock
测量CPU时间(至少在Linux中)。休眠过程不占用CPU时间。
如果您想要像使用秒表一样测量时间间隔,无论您的流程在做什么,请将clock_gettime
与CLOCK_MONOTONIC
一起使用。
答案 2 :(得分:0)
man clock()
有答案:
The clock() function returns an approximation of processor time used by the program.
这清楚地表明clock()
返回程序使用的处理器时间,而不是您期望通常使用gettimeofday
完成的程序总运行时间。