C++ 計算程式執行時間

本篇 ShengYu 將介紹如何使用 C++ std::chrono 計算某段程式碼執行的時間差並且列印時間差,
計算程式執行時間有幾種方式,本篇介紹使用 C++11 的 std::chrono 的幾種寫法來計算時間差並且用 printf 或 cout 將時間差印出來。

C++11 用法

需要引入的標頭檔<chrono>

在使用前,需要先宣告引用 chrono,以下範例分別示範 steady_clock 與 high_resolution_clock 的用法,
t1-t2 所花時間可使用 duration_cast 轉換,它會根據傳入的時間單位,回傳出對應的時間單位,

calculate-time.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// g++ calculate-time.cpp -o a.out -std=c++11 -pthread
#include <iostream>
#include <chrono>
#include <thread>

int main() {
std::chrono::steady_clock::time_point t1 = std::chrono::steady_clock::now();
std::this_thread::sleep_for(std::chrono::milliseconds(200));
std::chrono::steady_clock::time_point t2 = std::chrono::steady_clock::now();

std::cout << "Waited " << std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count() << " us.\n";
std::cout << "Waited " << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count() << " ms.\n";
printf("Waited %ld ms.\n", std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count());

auto t3 = std::chrono::high_resolution_clock::now();
std::this_thread::sleep_for(std::chrono::milliseconds(200));
auto t4 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> duration3 = t4 - t3;

printf("Waited %f ms.\n", duration3.count());
return 0;
}

輸出結果如下:

1
2
3
4
Waited 200072 us.
Waited 200 ms.
Waited 200 ms.
Waited 200.085996 ms.

參考
https://kheresy.wordpress.com/2013/12/27/c-stl-chrono/
C++ use std::chrono to measure execution of member functions in a nice way
https://stackoverflow.com/questions/52905915/c-use-stdchrono-to-measure-execution-of-member-functions-in-a-nice-way
深入理解std::chrono的時鐘Clock
https://www.cnblogs.com/zhongpan/p/7490657.html

相關主題
C/C++ 新手入門教學懶人包
C++ 取得系統當前時間
std::this_thread::sleep_for 用法與範例
std::deque 用法與範例
std::queue 用法與範例
std::vector 用法與範例
std::thread 怎麼實作的?
Python 計算程式執行時間