每次迭代循环重置计时器

时间:2015-09-01 10:13:43

标签: c++ timer

我的目的是创建一个程序,分析不同数量的样本,每个样本都有一个时间限制。因此,计时器必须为每个样本重置。同样,必须是一个while循环,以确保程序运行不会太长时间。

代码:

 #include <cstdlib>
 #include<stdio.h>
 #include <iostream>
 #include <vector>
 #include <algorithm>
 #include <ctime>
 #include <cmath>
 #include <unistd.h>

 //All functions declaration


 int main(){
//function which read all the sample to analyse

for (int sample=0;sample<numOfSamples;sample++){

 srand(time(NULL));

float tMax = tMax();//A function which calculates the maxium time for that sample

clock_t t;
t=clock();

//Some more functions which are not important

time= (clock()-t)/CLOCKS_PER_SEC;

   while(time<tMax){

   //Do different functions

    time=(clock()-t)/CLOCKS_PER_SEC;
   cout<<"Timer: "<<time<<endl;

   }//End of while
}//End of For Loop (Samples)
}//ENd of main

这是我的代码,因为你看到我的计时器没有重置,因为我不知道如何使用它。但它的主要问题是计时器时间,它始终为0.所以它始终低于tMax。

如何重置计时器并获得大于0的值?

2 个答案:

答案 0 :(得分:2)

正如Basile所说,你可以使用<chrono>

// create chrono start time
auto startTime = std::chrono::system_clock::now();

//Some more functions which are not important

// get elapsed time
auto elapsedTime = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = elapsedTime - _startTime;

// check if duration expires
auto numSeconds = elapsed_seconds.count();
while (numSeconds < tMax)
{
    // Do different functions

    // check again
    elapsedTime = std::chrono::system_clock::now();
    elapsed_seconds = elapsedTime - _startTime;
    numSeconds = elapsed_seconds.count();
}

答案 1 :(得分:1)

可能你的计算机足够快,所以测量的时间总是小于一秒并且四舍五入为零。

在进行基准测试时,最好确保计算时间超过半秒,可能需要多次重复计算。

如果在Linux上,请阅读time(7)。考虑将<chrono>与C ++ 11一起使用(即使用g++ -std=c++11 -Wall -g -O编译)

您可以将clock()的结果转换为双浮点:

clock_t starttime= clock();
do_some_long_computation();
clock_t endtime= clock();
cout << "long computation took: " 
     << ((double)(endtime-starttime)/(double)CLOCKS_PER_SEC) 
     << endl;