我在这里找到了一些测量执行时间的代码 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中。
编辑:另外,只需要添加,执行时间就是几小时。所以准确性并不是真正的问题。
谢谢!
答案 0 :(得分:9)
您是否考虑过使用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;
答案 1 :(得分:6)
不幸的是,clock()在Linux上只有一秒的分辨率(即使它以微秒为单位返回时间)。
许多人使用gettimeofday()进行基准测试,但这会测量经过的时间 - 而不是此进程/线程使用的时间 - 因此并不理想。显然,如果您的系统或多或少处于闲置状态且测试时间很长,那么您可以对结果进行平均。通常较少的问题,但仍然值得知道的是gettimeofday()返回的时间是非单调的 - 它可以跳一点点,例如当您的系统首次连接到NTP时间服务器时。
用于基准测试的最佳方法是clock_gettime(),其中任何一个选项最适合您的任务。
注意但是,并非所有Linux平台都支持所有选项 - 除了clock_gettime(CLOCK_REALTIME),它等同于gettimeofday()。
答案 2 :(得分:0)
Tuomas Pelkonen已经提出了gettimeofday
方法,可以获得分辨率为微秒的时间。
在他的例子中,他继续转换为双倍。我个人已将timeval
结构包装到我自己的类中,将计数保持为秒和微秒作为整数并正确处理加减操作。
我更喜欢保持整数(使用精确的数学运算),而不是在可以的时候得到浮点数和所有的问题。