Chrono and Formatting

Chrono and Formatting

Measure time correctly and produce readable output with modern formatting APIs.

Chrono and Formatting

Pick the right clock

Use std::chrono::steady_clock for elapsed time and timeouts. Use std::chrono::system_clock for timestamps that correspond to calendar time.

using namespace std::chrono_literals;

auto start = std::chrono::steady_clock::now();
do_work();
auto end = std::chrono::steady_clock::now();

auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);

steady_clock will not jump backwards if the system time changes.

Timeouts and literals

auto retry_delay = 250ms;
auto max_wait = 5s;

Duration literals remove the guesswork around raw integers.

Formatting output cleanly

auto message = std::format("processed {} items in {} ms", count, elapsed.count());
std::cout << message << '\n';

If your standard library supports it, std::print can write directly:

std::print("processed {} items in {} ms\n", count, elapsed.count());

Practical example

void benchmark_sort(std::vector<int> values) {
    auto start = std::chrono::steady_clock::now();
    std::ranges::sort(values);
    auto end = std::chrono::steady_clock::now();

    auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::print("sorted {} values in {} ms\n", values.size(), ms.count());
}

Exercises