以秒为单位测量执行时间,以秒为单位

时间:2016-05-17 09:51:47

标签: c linux unix time clock

我正在尝试使用以下内容在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来说这似乎是不正确的。

有什么问题?

3 个答案:

答案 0 :(得分:2)

睡眠几乎不需要执行时间。该程序只需安排其唤醒,然后让自己入睡。在它睡着的时候,它没有执行。当它被唤醒时,它根本不需要做任何事情。这一切都只需要很短的一秒钟。

没有更多的执行时间来睡得更久。因此,当程序未执行时有2秒的时间这一事实没有效果。

答案 1 :(得分:1)

clock测量CPU时间(至少在Linux中)。休眠过程不占用CPU时间。

如果您想要像使用秒表一样测量时间间隔,无论您的流程在做什么,请将clock_gettimeCLOCK_MONOTONIC一起使用。

答案 2 :(得分:0)

man clock()有答案:

The clock() function returns an approximation of processor time used by the program.

这清楚地表明clock()返回程序使用的处理器时间,而不是您期望通常使用gettimeofday完成的程序总运行时间。