chrono
以睡眠来测试计时功能
在要测试的前后加上now()并计算差值。
#include <thread>
#include <chrono>
int main()
{
using namespace std::literals::chrono_literals;
auto start = std::chrono::high_resolution_clock::now();
std::this_thread::sleep_for(1s);
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration<float> duration = end - start;
std::cout << duration.count() << "s" << std::endl;
}
但是这样有些麻烦,每个测试语句都需要使用上面类似的重复语句很不友好。
结构体:一个计时的好方法
可以利用类或结构体的构造和析构计时。这样的好处是,在一个功能中,只要添加一个结构体的实例化即可,在功能作用域结束后,结构体就自动释放掉了。
例如我要测试一个Function():
注:如果不知道类型是什么(如start、end),可以使用auto,然后查看一下变量是什么类型的。另外windows和linux下的可能有区别(以下是linux实现)。
struct Timer
{
// 先写一下auto start = std::chrono::high_resolution_clock::now();查看变量类型
std::chrono::_V2::system_clock::time_point start, end;
std::chrono::duration<float> duration;
Timer()
{
start = std::chrono::high_resolution_clock::now();
}
~Timer()
{
end = std::chrono::high_resolution_clock::now();
duration = end - start;
// 具体的计时方式可以在析构函数里自行定义
float ms = duration.count() * 1000.0f;
std::cout << "Timer took " << ms << "ms" << std::endl;
}
};
void Function()
{
// 计时只需要加一个实例化,主函数什么也不用加
Timer timer;
for (int i = 0; i < 100; i++)
{
// std::cout << "Hello\n" ;
std::cout << "Hello" << std::endl;
}
// 以上代码可以发现其实\n比endl更快
}
int main()
{
Function();
}