我在这里找到了一些测量执行时间的代码 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;
Run Code Online (Sandbox Code Playgroud)
然后
double diffclock(clock_t clock1,clock_t clock2)
{
double diffticks=clock1-clock2;
double diffms=(diffticks)/(CLOCKS_PER_SEC);
return diffms;
}
Run Code Online (Sandbox Code Playgroud)
然而,这总是返回0秒...是否有另一种方法可以工作?
此外,这是在Linux中.
编辑:另外,只需添加,执行时间就是几小时.所以准确性并不是真正的问题.
谢谢!
你考虑过使用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;
Run Code Online (Sandbox Code Playgroud)
不幸的是,clock()在Linux上只有一秒的分辨率(即使它以微秒为单位返回时间).
许多人使用gettimeofday()进行基准测试,但是这会测量经过的时间 - 而不是此进程/线程使用的时间 - 因此并不理想.显然,如果您的系统或多或少处于闲置状态且测试时间很长,那么您可以对结果进行平均.通常较少的问题,但仍然值得知道的是gettimeofday()返回的时间是非单调的 - 它可以跳转一点,例如当你的系统首次连接到NTP时间服务器时.
用于基准测试的最佳方法是clock_gettime(),其中最适合您的任务的选项.
但请注意,并非所有Linux平台都支持所有选项 - 除了clock_gettime(CLOCK_REALTIME),它等同于gettimeofday().
有用的链接:使用clock_gettime进行性能分析代码