Daily bit(e) C++ #73, Измерение времени с использованием библиотеки C++11 std::chrono
Библиотека std::chrono
, добавленная в C++11, обеспечивает простое измерение времени.
Библиотека предоставляет два типа для хранения информации о времени: временные точки и длительности.
Помимо ожидаемых операций, библиотека предоставляет удобные функции, такие как красивая печать (C++20) и литералы времени (C++14).
#include <chrono> #include <iostream> #include <thread> // sleep_for using namespace std::literals; auto tp1 = std::chrono::steady_clock::now(); // obtain a time point std::this_thread::sleep_for(1ms); // millisecond literal auto tp2 = std::chrono::steady_clock::now(); // base type and precision depend on the type of clock // The standard offers three clocks: // std::chrono::system_clock, std::chrono::steady_clock, // std::chrono::high_resolution_clock // Whether a clock is steady and its resolution can be queried using: bool system_is_steady = std::chrono::system_clock::is_steady; auto resolution = std::chrono::system_clock::duration{1}; auto duration = tp2 - tp1; // difference of time points is a duration std::cout << duration << "\n"; // example output: 1115389ns // explicit type of duration, base type double, with micro precision std::chrono::duration<double, std::micro> fpdur = tp2 - tp1; std::cout << fpdur << "\n"; // example output: 1115.39µs // duractions can be converted between each other using duration_cast auto micro = std::chrono::duration_cast< std::chrono::microseconds>(tp2 - tp1); std::cout << micro << "\n"; // example output: 1115µs