From 8b29f7bad5fac36817424fedd2b6206df9d545c5 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sat, 19 Jul 2008 13:02:13 +0000 Subject: [PATCH] Refactor EventDispatcher::tick to allow arbitary timeouts --- source/eventdispatcher.cpp | 30 ++++++++++++++++++------------ source/eventdispatcher.h | 13 ++++++++++--- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/source/eventdispatcher.cpp b/source/eventdispatcher.cpp index 04147e9..2150fe2 100644 --- a/source/eventdispatcher.cpp +++ b/source/eventdispatcher.cpp @@ -47,23 +47,22 @@ void EventDispatcher::remove(Base &obj) } } -void EventDispatcher::tick(bool block) +void EventDispatcher::tick() { if(objects.empty()) return; - int ret; - if(block) - ret=poller.poll(); - else - ret=poller.poll(Time::zero); + if(poller.poll()>0) + dispatch(); +} - if(ret>0) - { - const Poller::SlotSeq &result=poller.get_result(); - for(Poller::SlotSeq::const_iterator i=result.begin(); i!=result.end(); ++i) - i->object->event(i->events); - } +void EventDispatcher::tick(const Time::TimeDelta &dt) +{ + if(objects.empty()) + return; + + if(poller.poll(dt)>0) + dispatch(); } void EventDispatcher::object_events_changed(PollEvent ev, Base *obj) @@ -76,5 +75,12 @@ void EventDispatcher::object_deleted(Base *obj) remove(*obj); } +void EventDispatcher::dispatch() +{ + const Poller::SlotSeq &result=poller.get_result(); + for(Poller::SlotSeq::const_iterator i=result.begin(); i!=result.end(); ++i) + i->object->event(i->events); +} + } // namespace IO } // namespace Msp diff --git a/source/eventdispatcher.h b/source/eventdispatcher.h index 6f6fe6f..8142b08 100644 --- a/source/eventdispatcher.h +++ b/source/eventdispatcher.h @@ -26,10 +26,16 @@ public: void remove(Base &); /** - Checks for and dispatches events. If block is true, will block until events - are available. + Checks for and dispatches events. If there are no events available, blocks + until there are. */ - void tick(bool =true); + void tick(); + + /** + Checks for and dispatches events. If there are no events available, waits + at most the specified time before returning. + */ + void tick(const Time::TimeDelta &); private: struct Slot { @@ -46,6 +52,7 @@ private: void object_events_changed(PollEvent, Base *); void object_deleted(Base *); + void dispatch(); }; } // namespace IO -- 2.43.0