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