为优化程序,想知道程序中哪个函数消耗时间最长,自己写了个计算程序执行时间的代码,简单好用
#include<ctime>
#include<string>
#include <iostream>
class Timer
{
clock_t startT;
std::string label;//计时内容:有多个计时的时候用于区分
bool isEnd;//是否已经手动结束计时
public:
Timer(std::string name = "Time")//创建时开始计时
{
startT = clock();
label = name;
isEnd = false;
}
~Timer()//自动结束计时//对象被销毁时自动结束计时
{
if (!isEnd)
{
clock_t endT = clock();
double endtime = (double)(endT - startT) / CLOCKS_PER_SEC;
std::cout<<label<<": "<< endtime << std::endl; //s为单位
}
}
void End()//手动结束//手动控制在任意位置处结束计时
{
clock_t endT = clock();
double endtime = (double)(endT - startT) / CLOCKS_PER_SEC;
std::cout << label << ": " << endtime << std::endl; //s为单位
isEnd = true;
}
};
利用析构函数自动结束计时并打印出时间,也可手动停止计时并打印时间。
下面为使用范例:
例1:计算执行 if( ){ } 代码块中所耗时间
void vIFD::DecodeStrips()
{
//......省略部分代码
if (/*...*/)
{
Timer time("if Time");//开始计时
//......省略部分代码
//离开作用域后Timer对象被销毁,调用析构函数,自动结束计时
}
//......省略部分代码
}
输出结果为:
if Time: 8.877
例2:计算某几行代码消耗时间
int main()
{
//......省略部分代码
Timer time("Total time");
//......需要计算时间的代码
time.End();//手动结束计时
//......省略部分代码
return 0;
}
输出结果为:
Total Time: 8.907
例3:计算某函数消耗时间
void vIFD::DecodeStrips()
{
Timer time("DecodeStrips Time");//开始计时
//......省略部分代码
//离开函数后Timer对象被销毁,调用析构函数,自动结束计时
}
输出结果为:
DecodeStrips Time: 8.107