EuvWork.hpp
1 //
2 // Created by xiong on 2021/4/8.
3 //
4 
5 #ifndef EMX_EuvWork_HPP
6 #define EMX_EuvWork_HPP
7 
8 #include "EuvLoop.hpp"
9 
10 namespace Emx {
18  class EuvWork {
19  public:
21  : m_loop(nullptr), m_work(nullptr), m_arg(nullptr), m_runCb(nullptr), m_afterCb(nullptr),
22  m_isWorking(false) {}
23 
24 
29  using RunWorkCallBack = std::function<void(void *arg)>;
30 
36  using AfterWorkCallBack = std::function<void(Emx::ErrCodeE e, void *arg)>;
37 
38 
48  ErrCodeE Create(EuvLoop *loop, void *arg = nullptr, RunWorkCallBack runCb = nullptr,
49  AfterWorkCallBack afterCb = nullptr, const std::string &threadName = "");
50 
57  void Destroy();
58 
69  ErrCodeE Run(void *arg = nullptr, RunWorkCallBack runCb = nullptr, AfterWorkCallBack afterCb = nullptr,
70  const std::string &threadName = "");
71 
76  bool IsWorking() { return m_isWorking; }
77 
82  static void SetWorkNum(int num);
83 
88  static int GetWorkNum();
89 
90  private:
91  static void OnDestroy(uv_work_t *req, int status);
92 
93  private:
94  EuvLoop *m_loop;
95  uv_work_t *m_work;
96  void *m_arg;
97  RunWorkCallBack m_runCb;
98  AfterWorkCallBack m_afterCb;
99  bool m_isWorking;
100  bool m_isRunning;
101  std::string m_threadName;
102  bool m_isShowThreadName;
103  };
104 
106 }// namespace Emx
107 
108 #endif//EMX_EuvWork_HPP
实现多路复用循环的主体,所有基于EuvLoop的事件都应绑定到一个EuvLoop上
Definition: EuvLoop.hpp:18
提供在EuvLoop内调用线程池执行阻塞耗时任务的机制
Definition: EuvWork.hpp:18
EuvWork()
Definition: EuvWork.hpp:20
ErrCodeE Run(void *arg=nullptr, RunWorkCallBack runCb=nullptr, AfterWorkCallBack afterCb=nullptr, const std::string &threadName="")
运行任务
ErrCodeE Create(EuvLoop *loop, void *arg=nullptr, RunWorkCallBack runCb=nullptr, AfterWorkCallBack afterCb=nullptr, const std::string &threadName="")
创建work,可指定后续运行参数
static void SetWorkNum(int num)
配置当前进程线程池大小
void Destroy()
销毁work,如果任务未执行则立刻返回,如果任务在执行中则以阻塞方式等待任务执行完毕
bool IsWorking()
获取work是否正在运行
Definition: EuvWork.hpp:76
std::function< void(Emx::ErrCodeE e, void *arg)> AfterWorkCallBack
任务执行完毕的回调函数,此函数运行在loop中,在此回调中可以再次Run新的任务
Definition: EuvWork.hpp:36
static int GetWorkNum()
获取当前进程线程池大小
std::function< void(void *arg)> RunWorkCallBack
注册执行耗时阻塞任务的回调函数,此函数运行在loop外的线程池中
Definition: EuvWork.hpp:29
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
Definition: EmxGpio.hpp:10