Skip to content

TimeThis

Build Status NuGet Version NuGet Downloads Tests C++20 License BSD-3

A lightweight, header-only Modern C++20 stopwatch utility for measuring code execution time with optional callbacks.

Features

  • RAII-Based Timing: Automatically measures elapsed time from construction to destruction.
  • Optional Callbacks: Execute a custom callback function with the elapsed duration on scope exit.
  • std::format Support: Native formatter specialization for std::format.
  • Source Location Tracking: Automatically captures where the timer was constructed via std::source_location.
  • Stream Output: Direct output stream integration via operator<<.
  • Header-only C++20: Zero compiled library linkage; clean compilation on MSVC, Clang, and GCC.
  • CPM & FetchContent Integration: Trivial one-line CMake dependency integration.
  • Native NuGet Package: First-class Visual Studio / MSBuild packaging with Natvis visualization.

Quick Example

#include <iostream>
#include "siddiqsoft/timethis.hpp"

int main()
{
    siddiqsoft::timethis timer;

    // ... do work ...

    std::cout << "Elapsed: " << timer.lap() << " us\n";
    return 0;
}
#include <iostream>
#include <chrono>
#include "siddiqsoft/timethis.hpp"

void processTask()
{
    siddiqsoft::timethis timer([](const auto& duration) {
        auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(duration);
        std::cout << "Task took " << ms.count() << " ms\n";
    });

    // ... do work ...
} // Callback invoked automatically on scope exit
#include <iostream>
#include <format>
#include "siddiqsoft/timethis.hpp"

int main()
{
    siddiqsoft::timethis timer;
    // ... do work ...
    std::cout << std::format("{}\n", timer);
    return 0;
}

Documentation

License

Licensed under the BSD 3-Clause License.