用C ++查找程序的运行时间

时间:2015-05-20 16:07:41

标签: c++ performance

我有以下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;
}

但是,它比实际执行时间少得多。可能是什么问题?

3 个答案:

答案 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;