parent
4f674467d2
commit
1ccac9dbf8
@ -0,0 +1,109 @@ |
||||
#include "../lib/timers.hpp" |
||||
|
||||
namespace marcelb::asynco { |
||||
|
||||
int64_t rtime_ms() { |
||||
return chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now() |
||||
.time_since_epoch()) |
||||
.count(); |
||||
} |
||||
|
||||
int64_t rtime_us() { |
||||
return chrono::duration_cast<chrono::microseconds>(chrono::system_clock::now() |
||||
.time_since_epoch()) |
||||
.count(); |
||||
} |
||||
|
||||
void timer::init() { |
||||
st.async_wait( [this] (const boost::system::error_code&) { |
||||
if (!_stop) { |
||||
callback(); |
||||
if (repeate) { |
||||
st = boost::asio::steady_timer(_asynco_engine.io_context, boost::asio::chrono::milliseconds(time)); |
||||
init(); |
||||
} |
||||
_ticks++; |
||||
} |
||||
}); |
||||
} |
||||
|
||||
timer::timer (function<void()> _callback, uint64_t _time, bool _repeate) : |
||||
st(_asynco_engine.io_context, boost::asio::chrono::milliseconds(_time)), |
||||
_stop(false), |
||||
repeate(_repeate), |
||||
callback(_callback), |
||||
time(_time) { |
||||
|
||||
init(); |
||||
} |
||||
|
||||
void timer::stop() { |
||||
_stop = true; |
||||
st.cancel(); |
||||
} |
||||
|
||||
void timer::now() { |
||||
st.cancel(); |
||||
} |
||||
|
||||
uint64_t timer::ticks() { |
||||
return _ticks; |
||||
} |
||||
|
||||
bool timer::stoped() { |
||||
return _stop; |
||||
} |
||||
|
||||
timer::~timer() { |
||||
stop(); |
||||
} |
||||
|
||||
periodic::periodic(function<void()> callback, uint64_t time) :
|
||||
_timer(make_shared<timer> (callback, time, true)) { |
||||
} |
||||
|
||||
void periodic::stop() { |
||||
_timer->stop(); |
||||
} |
||||
|
||||
void periodic::now() { |
||||
_timer->now(); |
||||
} |
||||
|
||||
uint64_t periodic::ticks() { |
||||
return _timer->ticks(); |
||||
} |
||||
|
||||
bool periodic::stoped() { |
||||
return _timer->stoped(); |
||||
} |
||||
|
||||
periodic::~periodic() { |
||||
stop(); |
||||
} |
||||
|
||||
delayed::delayed(function<void()> callback, uint64_t time) :
|
||||
_timer(make_shared<timer> (callback, time, false)) { |
||||
} |
||||
|
||||
void delayed::stop() { |
||||
_timer->stop(); |
||||
} |
||||
|
||||
void delayed::now() { |
||||
_timer->now(); |
||||
} |
||||
|
||||
bool delayed::expired() { |
||||
return bool(_timer->ticks()); |
||||
} |
||||
|
||||
bool delayed::stoped() { |
||||
return _timer->stoped(); |
||||
} |
||||
|
||||
delayed::~delayed() { |
||||
stop(); |
||||
} |
||||
|
||||
}; |
Loading…
Reference in new issue