File tree Expand file tree Collapse file tree 4 files changed +60
-12
lines changed Expand file tree Collapse file tree 4 files changed +60
-12
lines changed Original file line number Diff line number Diff line change @@ -22,11 +22,6 @@ class singleton_base
22
22
23
23
static _object_create obj;
24
24
25
- private:
26
- singleton_base ()
27
- {
28
- }
29
-
30
25
public:
31
26
32
27
static _T& instance ()
Original file line number Diff line number Diff line change 2
2
#define _IO_LOOP_POOL_H_
3
3
#include < vector>
4
4
#include " loop.h"
5
+ #include < memory>
5
6
#include " singleton_base.h"
6
7
7
- class io_loop_pool : public singleton_base <io_loop_pool>
8
+ class io_loop_pool // : public singleton_base<io_loop_pool>
8
9
{
9
10
public:
10
- io_loop_pool& instance ();
11
+ static io_loop_pool& instance ();
11
12
io_loop& get_io_loop ();
12
13
bool run ();
13
14
bool stop ();
14
15
15
16
private:
16
17
io_loop_pool ();
17
- io_loop_pool (const std::size_t & size);
18
18
~io_loop_pool ();
19
19
20
-
21
20
private:
22
- std::size_t m_size;
23
- std::vector<io_loop> m_pool;
21
+ std::size_t m_size;
22
+ std::size_t m_next;
23
+ std::vector<std::shared_ptr<io_loop> > m_pool;
24
24
};
25
25
26
26
#endif // _IO_LOOP_POOL_H_
Original file line number Diff line number Diff line change @@ -101,7 +101,7 @@ void configuration::analyse(const std::vector<std::string>& vstr)
101
101
std::size_t i = 0 ;
102
102
for (; i < strtmp.size (); ++i)
103
103
{
104
- if (strtmp[i] == ' =' )
104
+ if (strtmp[i] == ' =' || i == strtmp. size () - 1 )
105
105
{
106
106
break ;
107
107
}
Original file line number Diff line number Diff line change 1
1
#include " io_loop_pool.h"
2
+ #include " configuration.h"
3
+
4
+ io_loop_pool& io_loop_pool::instance ()
5
+ {
6
+ static io_loop_pool pool;
7
+ return pool;
8
+ }
9
+
10
+ io_loop& io_loop_pool::get_io_loop ()
11
+ {
12
+ if (m_next < m_size)
13
+ {
14
+ __sync_add_and_fetch (&m_next, 1 );
15
+ }
16
+ else
17
+ {
18
+ m_next = 0 ;
19
+ }
20
+
21
+ return *m_pool[m_next];
22
+ }
23
+
24
+ bool io_loop_pool::run ()
25
+ {
26
+ for (std::size_t i = 0 ; i < m_size; ++i)
27
+ {
28
+ m_pool[i]->run ();
29
+ }
30
+ return true ;
31
+ }
32
+
33
+ bool io_loop_pool::stop ()
34
+ {
35
+ for (std::size_t i = 0 ; i < m_size; ++i)
36
+ {
37
+ m_pool[i]->stop ();
38
+ }
39
+ return true ;
40
+ }
41
+
42
+ io_loop_pool::io_loop_pool (): m_size(configuration::instance().get_ev_loop_size()), m_next(-1 )
43
+ {
44
+ for (std::size_t i = 0 ; i < m_size; ++i)
45
+ {
46
+ m_pool.push_back (std::shared_ptr<io_loop>(new (std::nothrow) io_loop ()));
47
+ }
48
+ }
49
+
50
+ io_loop_pool::~io_loop_pool ()
51
+ {
52
+ stop ();
53
+ }
54
+
You can’t perform that action at this time.
0 commit comments