我在这里发现了一些测量执行时间的代码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中。
编辑:另外,只需要添加,执行时间是几小时。 所以准确性不是一个真正的问题。
谢谢!
你有没有考虑过使用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(),无论哪个选项最适合您的任务。
但是注意并不是所有的Linux平台都支持所有的选项,除了clock_gettime(CLOCK_REALTIME),它等价于gettimeofday()。
有用的链接: 使用clock_gettime分析代码
Tuomas Pelkonen已经提出了gettimeofday
方法,允许以微秒的分辨率获得时间。
在他的例子中,他继续转化为双倍。 我个人已经将timeval
结构包装到我自己的类中,将计数保持为秒和微秒整数,并正确处理加减操作。
我喜欢保持整数(具有精确的数学),而不是浮点数和所有他们的困境时,我可以。