File tree Expand file tree Collapse file tree 1 file changed +77
-0
lines changed Expand file tree Collapse file tree 1 file changed +77
-0
lines changed Original file line number Diff line number Diff line change 1+ // Copyright (c) 2015
2+ // Author: Chrono Law
3+ #ifndef _NGX_THREAD_HPP
4+ #define _NGX_THREAD_HPP
5+
6+ #include " NgxPool.hpp"
7+ #include " NgxEvent.hpp"
8+
9+ template <typename T>
10+ class NgxThreadTask final : public NgxWrapper<ngx_thread_task_t >
11+ {
12+ public:
13+ typedef NgxWrapper<ngx_thread_task_t > super_type;
14+ typedef NgxThreadTask this_type;
15+ typedef T task_ctx_type;
16+ public:
17+ NgxThreadTask (ngx_thread_task_t * t) : super_type(t)
18+ {}
19+
20+ ~NgxThreadTask () = default ;
21+ public:
22+ T& ctx () const
23+ {
24+ return *reinterpret_cast <T*>(get ()->ctx );
25+ }
26+
27+ template <typename F>
28+ void handler (F f) const
29+ {
30+ if (!get ()->handler )
31+ {
32+ get ()->handler = f;
33+ }
34+ }
35+ public:
36+ NgxEvent event () const
37+ {
38+ return &get ()->event ;
39+ }
40+ public:
41+ static ngx_thread_task_t * create (const NgxPool& pool)
42+ {
43+ auto p = pool.thread_task <T>();
44+
45+ return p;
46+ }
47+ };
48+
49+ class NgxThreadPool final : public NgxWrapper<ngx_thread_pool_t >
50+ {
51+ public:
52+ typedef NgxWrapper<ngx_thread_pool_t > super_type;
53+ typedef NgxThreadPool this_type;
54+ public:
55+ NgxThreadPool (ngx_thread_pool_t * p) : super_type(p)
56+ {}
57+
58+ ~NgxThreadPool () = default ;
59+ public:
60+ void post (ngx_thread_task_t * task) const
61+ {
62+ auto rc = ngx_thread_task_post (get (), task);
63+
64+ NgxException::require (rc);
65+ }
66+ public:
67+ static ngx_thread_pool_t * acquire (ngx_str_t & name)
68+ {
69+ auto p = ngx_thread_pool_get ((ngx_cycle_t *) ngx_cycle, &name);
70+
71+ NgxException::require (p);
72+
73+ return p;
74+ }
75+ };
76+
77+ #endif // _NGX_THREAD_HPP
You can’t perform that action at this time.
0 commit comments