diff options
Diffstat (limited to '3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.cpp')
-rw-r--r-- | 3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.cpp | 69 |
1 files changed, 0 insertions, 69 deletions
diff --git a/3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.cpp b/3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.cpp deleted file mode 100644 index 049ac988615..00000000000 --- a/3rdparty/asio/src/examples/cpp03/http/server2/io_context_pool.cpp +++ /dev/null @@ -1,69 +0,0 @@ -// -// io_context_pool.cpp -// ~~~~~~~~~~~~~~~~~~~ -// -// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com) -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -#include "server.hpp" -#include <stdexcept> -#include <boost/bind.hpp> -#include <boost/shared_ptr.hpp> - -namespace http { -namespace server2 { - -io_context_pool::io_context_pool(std::size_t pool_size) - : next_io_context_(0) -{ - if (pool_size == 0) - throw std::runtime_error("io_context_pool size is 0"); - - // Give all the io_contexts work to do so that their run() functions will not - // exit until they are explicitly stopped. - for (std::size_t i = 0; i < pool_size; ++i) - { - io_context_ptr io_context(new asio::io_context); - io_contexts_.push_back(io_context); - work_.push_back(asio::make_work_guard(*io_context)); - } -} - -void io_context_pool::run() -{ - // Create a pool of threads to run all of the io_contexts. - std::vector<boost::shared_ptr<asio::thread> > threads; - for (std::size_t i = 0; i < io_contexts_.size(); ++i) - { - boost::shared_ptr<asio::thread> thread(new asio::thread( - boost::bind(&asio::io_context::run, io_contexts_[i]))); - threads.push_back(thread); - } - - // Wait for all threads in the pool to exit. - for (std::size_t i = 0; i < threads.size(); ++i) - threads[i]->join(); -} - -void io_context_pool::stop() -{ - // Explicitly stop all io_contexts. - for (std::size_t i = 0; i < io_contexts_.size(); ++i) - io_contexts_[i]->stop(); -} - -asio::io_context& io_context_pool::get_io_context() -{ - // Use a round-robin scheme to choose the next io_context to use. - asio::io_context& io_context = *io_contexts_[next_io_context_]; - ++next_io_context_; - if (next_io_context_ == io_contexts_.size()) - next_io_context_ = 0; - return io_context; -} - -} // namespace server2 -} // namespace http |