2 #include "eventobject.h"
4 #include "poll_platform.h"
13 events_changed(false),
22 void Poller::set_object(EventObject &obj, PollEvent ev)
24 // Verify that the object has an event handle
26 obj.get_event_handle();
28 for(vector<Slot>::iterator i=objects.begin(); i!=objects.end(); ++i)
39 events_changed = true;
47 if(objects.size()>=MAXIMUM_WAIT_OBJECTS)
48 throw logic_error("Maximum number of wait objects reached");
51 objects.push_back(Slot(&obj, ev));
60 int Poller::poll(const Time::TimeDelta &timeout)
62 if(timeout<Time::zero)
63 throw invalid_argument("Poller::poll");
65 return do_poll(static_cast<int>(timeout/Time::msec));
68 int Poller::do_poll(int timeout)
70 if(objs_changed || events_changed)
73 events_changed = false;
79 platform_poll(timeout);
81 return poll_result.size();
86 PollEvent platform_poll(EventObject &, PollEvent, int);
88 PollEvent poll(EventObject &obj, PollEvent pe)
90 return platform_poll(obj, pe, -1);
93 PollEvent poll(EventObject &obj, PollEvent pe, const Time::TimeDelta &timeout)
95 if(timeout<Time::zero)
96 throw invalid_argument("poll");
98 return platform_poll(obj, pe, static_cast<int>(timeout/Time::msec));