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