|
UniSet
2.6.0
|
00001 // ------------------------------------------------------------------------- 00002 #ifndef EventLoopServer_H_ 00003 #define EventLoopServer_H_ 00004 // ------------------------------------------------------------------------- 00005 #include <ev++.h> 00006 #include <atomic> 00007 #include <thread> 00008 // ------------------------------------------------------------------------- 00009 namespace uniset 00010 { 00016 class EventLoopServer 00017 { 00018 public: 00019 00020 EventLoopServer(); 00021 virtual ~EventLoopServer(); 00022 00023 bool evIsActive() const noexcept; 00024 00025 protected: 00026 // действия при завершении 00027 // завершение своих ev::xxx.stop() 00028 virtual void evfinish() {} 00029 00030 // подготовка перед запуском loop 00031 // запусу своих ev::xxx.start() 00032 virtual void evprepare() {} 00033 00034 // Управление потоком событий 00035 void evrun( bool thread = true ); 00036 void evstop(); 00037 00038 ev::dynamic_loop loop; 00039 00040 private: 00041 00042 void onStop() noexcept; 00043 void defaultLoop() noexcept; 00044 00045 std::atomic_bool cancelled = { false }; 00046 std::atomic_bool isrunning = { false }; 00047 00048 ev::async evterm; 00049 std::shared_ptr<std::thread> thr; 00050 }; 00051 // ------------------------------------------------------------------------- 00052 } // end of uniset namespace 00053 // ------------------------------------------------------------------------- 00054 #endif // EventLoopServer_H_ 00055 // -------------------------------------------------------------------------
1.7.6.1