c++11测试时间封装
Posted qianbo_insist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++11测试时间封装相关的知识,希望对你有一定的参考价值。
1、定义一个测试时间函数
类似于windows下Get Tick Count() 这种函数,时间是不准的
使用std::chrono::system_clock来获取时间
class TicToc
{
public:
TicToc()
{
tic();
}
void tic()
{
start = std::chrono::system_clock::now();
}
double toc()
{
end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end - start;
return elapsed_seconds.count() * 1000;
}
private:
std::chrono::time_point<std::chrono::system_clock> start, end;
};
输出为毫秒
2、定义测试函数
int result_future()
{
int i=0,ret = 0;
std::this_thread::sleep_for(std::chrono::seconds(2));
return ret + 1;
}
int result_add(int x, int y)
{
return x + y;
}
void print_point(int x)
{
std::cout << "this is a print point "<<x-1<<"->"<<x<< std::endl;
}
3、测试main主函数
做一个宏定义技巧,每次重新开始计时
#define D(x) std::cout<<tt.toc()<<setw(8)<<setfill('0')<<" ";\\
print_point(x);\\
tt.tic()
调用时就直接D(X) 就行了
int main()
{
#define D(x) std::cout<<tt.toc()<<setw(8)<<setfill('0')<<" ";\\
print_point(x);\\
tt.tic()
TicToc tt;
std::future<int> result = std::async(result_future);
D(1);
std::cout << result.get() << std::endl;
D(2);
std::packaged_task<int(int, int)> task(result_add);
D(3);
std::future<int> result1 = task.get_future();
D(4);
task(1, 1); //执行任务
D(5);
std::cout << result1.get() << std::endl;
D(6);
return 0;
return 0;
}
执行以上函数,使用future 和 packaged_task , 所有语句之间的执行时间都测试出来了
以上是关于c++11测试时间封装的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装