参考
前言
- 传统方法: 使用ctime计时, 精度较低
- c++11方法: 使用chrono计时, 可以达到毫秒, 微秒, 纳秒级别的精度
chrono
#include <chrono>
auto start_1 = std::chrono::system_clock::now();
auto end_1 = std::chrono::system_clock::now();
auto duration_2 = std::chrono::duration_cast<std::chrono::milliseconds>(end_2 - start_2).count(); // 毫秒
auto start_2 = std::chrono::system_clock::now();
auto end_2 = std::chrono::system_clock::now();
auto duration_2 = std::chrono::duration_cast<std::chrono::microseconds>(end_2 - start_2).count(); // 微秒
auto start_3 = std::chrono::high_resolution_clock::now();
auto end_3 = std::chrono::high_resolution_clock::now();
auto duration_3 = std::chrono::duration_cast<std::chrono::nanoseconds>(end_3 - start_3).count(); //纳秒
ctime
#include <chrono> // C++11
#include <ctime> // 传统方法
#include <iostream>
#include <cmath>
int main(int argc, char** argv)
{
// 传统的方法
std::clock_t start_1 = std::clock();
double sum_1 = 0;
for (size_t i = 0; i < 1000; ++i)
{
sum_1 += std::pow(i, 10);
}
std::clock_t end_1 = std::clock();
std::cout << "timer_1 cost: " << double(end_1 - start_1) / CLOCKS_PER_SEC << " seconds" <<std::endl;
// 微秒级的精度
auto start_2 = std::chrono::system_clock::now();
double sum_2 = 0;
for (size_t i = 0; i < 1000; ++i)
{
sum_2 += std::pow(i, 10);
}
auto end_2 = std::chrono::system_clock::now();
auto duration_2 = 1.e-6 * std::chrono::duration_cast<std::chrono::microseconds>(end_2 - start_2).count();
std::cout << "timer_2 cost: " << double(duration_2) << " seconds" <<std::endl;
// 更高的精度-纳米级
auto start_3 = std::chrono::high_resolution_clock::now();
double sum_3 = 0;
for (size_t i = 0; i < 1000; ++i)
{
sum_3 += std::pow(i, 10);
}
auto end_3 = std::chrono::high_resolution_clock::now();
auto duration_3 = 1.e-9 * std::chrono::duration_cast<std::chrono::nanoseconds>(end_3 - start_3).count();
std::cout << "timer_3 cost: " << double(duration_3) << " seconds" <<std::endl;
return 0;
}
结果
timer_1 cost: 8.1e-05 seconds
timer_2 cost: 7.8e-05 seconds
timer_3 cost: 7.7762e-05 seconds