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 , 所有语句之间的执行时间都测试出来了
future输出

以上是关于c++11测试时间封装的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

C#VS快捷键

C#VS快捷键

C#VS快捷键

C#VS快捷键