}
}
-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)
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
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
{
void object_events_changed(PollEvent, Base *);
void object_deleted(Base *);
+ void dispatch();
};
} // namespace IO