在C ++中测量对system()的调用的执行时间

我在这里发现了一些测量执行时间的代码http://www.dreamincode.net/forums/index.php?showtopic=24685

但是,它似乎不适用于调用system()。 我想这是因为执行跳出当前进程。

clock_t begin=clock(); system(something); clock_t end=clock(); cout<<"Execution time: "<<diffclock(end,begin)<<" s."<<endl; 

然后

 double diffclock(clock_t clock1,clock_t clock2) { double diffticks=clock1-clock2; double diffms=(diffticks)/(CLOCKS_PER_SEC); return diffms; } 

然而这总是返回0秒…是否有另一种方法,将工作?

另外,这是在Linux中。

编辑:另外,只需要添加,执行时间是几小时。 所以准确性不是一个真正的问题。

谢谢!

Solutions Collecting From Web of "在C ++中测量对system()的调用的执行时间"

你有没有考虑过使用gettimeofday ?

 struct timeval tv; struct timeval start_tv; gettimeofday(&start_tv, NULL); system(something); double elapsed = 0.0; gettimeofday(&tv, NULL); elapsed = (tv.tv_sec - start_tv.tv_sec) + (tv.tv_usec - start_tv.tv_usec) / 1000000.0; 

不幸的是,clock()在Linux上只有一秒的分辨率(即使它以微秒为单位返回时间)。

许多人使用gettimeofday()进行基准测试,但是这种测量已经过去的时间,而不是这个进程/线程所使用的时间,所以并不理想。 显然如果你的系统或多或少处于闲置状态而且测试时间很长,那么你可以对结果进行平均。 通常情况下,少一个问题,但仍值得了解gettimeofday()返回的时间是非单调的 – 它可以跳转一点,例如当你的系统第一次连接到一个NTP时间服务器。

用于基准测试的最佳方法是clock_gettime(),无论哪个选项最适合您的任务。

  • CLOCK_THREAD_CPUTIME_ID – 线程特定的CPU时钟。
  • CLOCK_PROCESS_CPUTIME_ID – 来自CPU的高分辨率每进程计时器。
  • CLOCK_MONOTONIC – 表示从某个非指定起点开始的单调时间。
  • CLOCK_REALTIME – 系统范围的实时时钟。

但是注意并不是所有的Linux平台都支持所有的选项,除了clock_gettime(CLOCK_REALTIME),它等价于gettimeofday()。

有用的链接: 使用clock_gettime分析代码

Tuomas Pelkonen已经提出了gettimeofday方法,允许以微秒的分辨率获得时间。

在他的例子中,他继续转化为双倍。 我个人已经将timeval结构包装到我自己的类中,将计数保持为秒和微秒整数,并正确处理加减操作。

我喜欢保持整数(具有精确的数学),而不是浮点数和所有他们的困境时,我可以。