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

Откройте пример в Compiler Explorer.