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