xref: /openbmc/telemetry/src/utils/detached_timer.hpp (revision dcc4e1936173a93251a02066432bc2bcbc386240)
1b5645947SKrzysztof Grobelny #pragma once
2b5645947SKrzysztof Grobelny 
3*dcc4e193SKrzysztof Grobelny #include "types/milliseconds.hpp"
4*dcc4e193SKrzysztof Grobelny 
5b5645947SKrzysztof Grobelny #include <boost/asio/io_context.hpp>
6b5645947SKrzysztof Grobelny #include <boost/asio/steady_timer.hpp>
7b5645947SKrzysztof Grobelny 
8b5645947SKrzysztof Grobelny #include <chrono>
9b5645947SKrzysztof Grobelny 
10b5645947SKrzysztof Grobelny namespace utils
11b5645947SKrzysztof Grobelny {
12b5645947SKrzysztof Grobelny 
13b5645947SKrzysztof Grobelny template <class F>
14*dcc4e193SKrzysztof Grobelny void makeDetachedTimer(boost::asio::io_context& ioc, Milliseconds delay,
15*dcc4e193SKrzysztof Grobelny                        F&& fun)
16b5645947SKrzysztof Grobelny {
17b5645947SKrzysztof Grobelny     auto timer = std::make_unique<boost::asio::steady_timer>(ioc);
18b5645947SKrzysztof Grobelny     timer->expires_after(delay);
19b5645947SKrzysztof Grobelny     timer->async_wait([timer = std::move(timer),
20b5645947SKrzysztof Grobelny                        fun = std::move(fun)](boost::system::error_code ec) {
21b5645947SKrzysztof Grobelny         if (ec)
22b5645947SKrzysztof Grobelny         {
23b5645947SKrzysztof Grobelny             return;
24b5645947SKrzysztof Grobelny         }
25b5645947SKrzysztof Grobelny         fun();
26b5645947SKrzysztof Grobelny     });
27b5645947SKrzysztof Grobelny }
28b5645947SKrzysztof Grobelny 
29b5645947SKrzysztof Grobelny } // namespace utils
30