diff --git a/include/lucene++/ThreadPool.h b/include/lucene++/ThreadPool.h index dc6446ff..175ac8ad 100644 --- a/include/lucene++/ThreadPool.h +++ b/include/lucene++/ThreadPool.h @@ -14,7 +14,9 @@ namespace Lucene { -typedef boost::shared_ptr workPtr; + +typedef boost::asio::io_context io_context_t; +typedef boost::asio::executor_work_guard work_t; /// A Future represents the result of an asynchronous computation. Methods are provided to check if the computation /// is complete, to wait for its completion, and to retrieve the result of the computation. The result can only be @@ -51,8 +53,8 @@ class ThreadPool : public LuceneObject { LUCENE_CLASS(ThreadPool); protected: - boost::asio::io_service io_service; - workPtr work; + io_context_t io_context; + work_t work; boost::thread_group threadGroup; static const int32_t THREADPOOL_SIZE; @@ -64,7 +66,7 @@ class ThreadPool : public LuceneObject { template FuturePtr scheduleTask(FUNC func) { FuturePtr future(newInstance()); - io_service.post(boost::bind(&ThreadPool::execute, this, func, future)); + boost::asio::post(io_context, boost::bind(&ThreadPool::execute, this, func, future)); return future; } diff --git a/src/core/util/ThreadPool.cpp b/src/core/util/ThreadPool.cpp index 8086d8b1..116f521c 100644 --- a/src/core/util/ThreadPool.cpp +++ b/src/core/util/ThreadPool.cpp @@ -14,15 +14,16 @@ Future::~Future() { const int32_t ThreadPool::THREADPOOL_SIZE = 5; -ThreadPool::ThreadPool() { - work.reset(new boost::asio::io_service::work(io_service)); +ThreadPool::ThreadPool() + : + work(boost::asio::make_work_guard(io_context)) +{ for (int32_t i = 0; i < THREADPOOL_SIZE; ++i) { - threadGroup.create_thread(boost::bind(&boost::asio::io_service::run, &io_service)); + threadGroup.create_thread(boost::bind(&boost::asio::io_context::run, &io_context)); } } ThreadPool::~ThreadPool() { - work.reset(); // stop all threads threadGroup.join_all(); // wait for all competition }