-
Notifications
You must be signed in to change notification settings - Fork 27
/
io_pool.h
33 lines (24 loc) · 856 Bytes
/
io_pool.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#pragma once
#include "base.h"
/// A pool of io_service objects.
class io_service_pool : noncopyable {
public:
/// Construct the io_service pool.
explicit io_service_pool(std::size_t pool_size);
/// Run all io_service objects in the pool.
void run();
/// Stop all io_service objects in the pool.
void stop();
/// Get an io_service to use.
asio::io_service& get_io_service();
asio::io_service& get_io_service(size_t index);
private:
typedef std::shared_ptr<asio::io_service> io_service_ptr;
typedef std::shared_ptr<asio::io_service::work> work_ptr;
/// The pool of io_services.
std::vector<io_service_ptr> io_services_;
/// The work that keeps the io_services running.
std::vector<work_ptr> work_;
/// The next io_service to use for a connection.
std::size_t next_io_service_;
};