我有以下C ++代码(为简单起见,我对其进行了简化。)
int main()
{
string runCommand="./runAnotherCppProgram.out";
for (int i=0; i<5; i++)
{
system(runCommand.c_str());
}
return 0;
}
现在我想知道每次迭代时runAnotherCppProgram.out需要多长时间。为此,我做了以下事情:
int main()
{
string runCommand = "./runAnotherCppProgram.out";
for (int i=0; i<5; i++)
{
clock_t clockStart = clock();
system(runCommand.c_str());
double finish = (double)(clock() - clockStart)/CLOCKS_PER_SEC;
cout << finish << endl;
}
return 0;
}
但是,它比实际执行时间少得多。可能是什么问题?
答案 0 :(得分:2)
如果您有权访问C ++ 11 ....
#include <chrono>
和
auto start = std::chrono::steady_clock::now();
//DO SOMETHING HERE
auto stop = std::chrono::steady_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(stop-start).count();
std::cout << "Running time was: " << ((double)duration / 1000.0) << "s" << std::endl;
你可以玩你投射它的单位以及你想要显示它的方式......(也就是我做了几毫秒然后除以1000得到一些小数点的秒数,持续时间是一个整数所以它如果你只是要求几秒钟,它将被四舍五入)
答案 1 :(得分:1)
仔细阅读clock()
的文档,它只报告调用它的过程的时间。使用system()
,您可以启动一个shell(并从那里开始另一个程序),它在不同的进程中运行。
BTW:在网上搜索&#34;计时C ++&#34;或类似的东西,它应该产生足够数量的结果,例如time()
或Boost.Chrono。
答案 2 :(得分:1)
来自Measuring execution time of a call to system() in C++
您是否考虑过使用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;