diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2013-01-14 19:07:38 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2013-01-14 19:07:38 +0100 |
| commit | 90eeb7b8a77a78a358234957624ea86cedc804f6 (patch) | |
| tree | 2a51d5ba471142111be091665006831491d09272 /src/event_manager.cc | |
| parent | eaaf88db1d3561161dd4d519f3d5952539eaef04 (diff) | |
EventManager: add support for timers
Diffstat (limited to 'src/event_manager.cc')
| -rw-r--r-- | src/event_manager.cc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/event_manager.cc b/src/event_manager.cc index 9ae3e78c..295bc622 100644 --- a/src/event_manager.cc +++ b/src/event_manager.cc @@ -16,6 +16,23 @@ FDWatcher::~FDWatcher() EventManager::instance().m_fd_watchers.remove(this); } +Timer::Timer(TimePoint date, Callback callback) + : m_date{date}, m_callback{std::move(callback)} +{ + EventManager::instance().m_timers.add(this); +} + +Timer::~Timer() +{ + EventManager::instance().m_timers.remove(this); +} + +void Timer::run() +{ + m_date = TimePoint::max(); + m_callback(*this); +} + EventManager::EventManager() { m_forced_fd.reserve(4); @@ -24,6 +41,7 @@ EventManager::EventManager() EventManager::~EventManager() { assert(m_fd_watchers.empty()); + assert(m_timers.empty()); } void EventManager::handle_next_events() @@ -48,6 +66,13 @@ void EventManager::handle_next_events() (*it)->run(); } } + + TimePoint now = Clock::now(); + for (auto& timer : m_timers) + { + if (timer->next_date() <= now) + timer->run(); + } } void EventManager::force_signal(int fd) |
