SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
PeriodicTimer.cc
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
7 
8 namespace SWC { namespace Comm {
9 
12  PeriodicTimer::Call_t&& call,
13  const IoContextPtr& ioctx)
14  : m_ms(cfg_ms), m_call(std::move(call)),
15  m_mutex(), m_timer(ioctx->executor()) {
16  schedule();
17 }
18 
20  m_timer.cancel();
21 }
22 
25  m_timer.expires_after(std::chrono::milliseconds(m_ms->get()));
26  struct TimerTask {
27  PeriodicTimer* tm;
29  TimerTask(PeriodicTimer* a_tm) noexcept : tm(a_tm) { }
30  void operator()(const asio::error_code& ec) {
31  if(ec != asio::error::operation_aborted) {
32  tm->m_call();
33  tm->schedule();
34  }
35  }
36  };
37  m_timer.async_wait(TimerTask(this));
38 }
39 
42  m_timer.cancel();
43 }
44 
45 
46 
48 
51  for(auto& tm : *this)
52  tm->cancel();
53  clear();
54 }
55 
57  PeriodicTimer::Call_t&& call,
58  const IoContextPtr& ioctx) {
60  emplace_back(new PeriodicTimer(ms, std::move(call), ioctx));
61 }
62 
63 
64 }}
SWC::Comm::PeriodicTimer::m_call
const Call_t m_call
Definition: PeriodicTimer.h:37
SWC::Core::Vector< std::unique_ptr< PeriodicTimer > >::clear
SWC_CAN_INLINE void clear() noexcept(_NoExceptDestructor)
Definition: Vector.h:120
SWC::Comm::PeriodicTimers::m_mutex
Core::MutexSptd m_mutex
Definition: PeriodicTimer.h:59
SWC::Comm::IoContextPtr
std::shared_ptr< IoContext > IoContextPtr
Definition: IoContext.h:16
SWC::Core::MutexSptd::scope
Definition: MutexSptd.h:96
SWC::Comm::PeriodicTimer::~PeriodicTimer
~PeriodicTimer() noexcept
Definition: PeriodicTimer.cc:19
SWC::Comm::PeriodicTimer::Call_t
const std::function< void()> Call_t
Definition: PeriodicTimer.h:18
IoContext.h
SWC::Config::Property::Value_int32_g::get
SWC_CAN_INLINE int32_t get() const noexcept
Definition: Property.h:610
SWC::Core::MutexAtomic::scope
Definition: MutexAtomic.h:77
SWC::Comm::PeriodicTimer::m_mutex
Core::MutexAtomic m_mutex
Definition: PeriodicTimer.h:38
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Comm::PeriodicTimers::stop
void stop()
Definition: PeriodicTimer.cc:49
SWC::Comm::PeriodicTimer::m_ms
const Config::Property::Value_int32_g::Ptr m_ms
Definition: PeriodicTimer.h:36
SWC::Comm::PeriodicTimers::set
void set(const Config::Property::Value_int32_g::Ptr ms, PeriodicTimer::Call_t &&call, const IoContextPtr &ioctx)
Definition: PeriodicTimer.cc:56
SWC::Comm::PeriodicTimer::schedule
void schedule()
Definition: PeriodicTimer.cc:23
SWC::Comm::PeriodicTimers::~PeriodicTimers
~PeriodicTimers() noexcept
Definition: PeriodicTimer.cc:47
SWC::Comm::PeriodicTimer::m_timer
asio::high_resolution_timer m_timer
Definition: PeriodicTimer.h:39
SWC::Comm::PeriodicTimer::cancel
void cancel()
Definition: PeriodicTimer.cc:40
SWC::Comm::PeriodicTimer::PeriodicTimer
PeriodicTimer(const Config::Property::Value_int32_g::Ptr cfg_ms, Call_t &&call, const IoContextPtr &ioctx)
Definition: PeriodicTimer.cc:10
SWC::Comm::PeriodicTimer
Definition: PeriodicTimer.h:16
SWC::Core::Vector< std::unique_ptr< PeriodicTimer > >::emplace_back
SWC_CAN_INLINE reference emplace_back(ArgsT &&... args)
Definition: Vector.h:349
SWC::Config::Property::Value_int32_g
Definition: Property.h:586