我的目的是创建一个程序,分析不同数量的样本,每个样本都有一个时间限制。因此,计时器必须为每个样本重置。同样,必须是一个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的值?
答案 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;