From 065a5eb2fb38974a5d866ed1f1ff9b728db41822 Mon Sep 17 00:00:00 2001 From: 0tkl <118708188+0tkl@users.noreply.github.com> Date: Sun, 22 Dec 2024 17:08:15 +0800 Subject: [PATCH] Replace some deprecated facilities from Boost.Asio --- libaegisub/common/dispatch.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/libaegisub/common/dispatch.cpp b/libaegisub/common/dispatch.cpp index 424d60e555..ebb9fc769c 100644 --- a/libaegisub/common/dispatch.cpp +++ b/libaegisub/common/dispatch.cpp @@ -19,14 +19,15 @@ #include "libaegisub/util.h" #include -#include +#include +#include #include #include #include #include namespace { - boost::asio::io_service *service; + boost::asio::io_context *service; std::function invoke_main; std::atomic threads_running; @@ -38,28 +39,28 @@ namespace { class BackgroundQueue final : public agi::dispatch::Queue { void DoInvoke(agi::dispatch::Thunk&& thunk) override { - service->post(thunk); + boost::asio::post(*service, std::move(thunk)); } }; class SerialQueue final : public agi::dispatch::Queue { - boost::asio::io_service::strand strand; + boost::asio::io_context::strand strand; void DoInvoke(agi::dispatch::Thunk&& thunk) override { - strand.post(thunk); + boost::asio::post(strand, std::move(thunk)); } public: SerialQueue() : strand(*service) { } }; struct IOServiceThreadPool { - boost::asio::io_service io_service; - std::unique_ptr work; + boost::asio::io_context io_context; + boost::asio::executor_work_guard work_guard; std::vector threads; - IOServiceThreadPool() : work(new boost::asio::io_service::work(io_service)) { } + IOServiceThreadPool() : work_guard(boost::asio::make_work_guard(io_context)) { } ~IOServiceThreadPool() { - work.reset(); + work_guard.reset(); #ifndef _WIN32 for (auto& thread : threads) thread.join(); #else @@ -76,7 +77,7 @@ namespace agi::dispatch { void Init(std::function&& invoke_main) { static IOServiceThreadPool thread_pool; - ::service = &thread_pool.io_service; + ::service = &thread_pool.io_context; ::invoke_main = invoke_main; thread_pool.threads.reserve(std::max(4, std::thread::hardware_concurrency()));