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<PolledObject>::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(PolledObject(&obj, ev));
55 unsigned Poller::poll()
60 unsigned 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 unsigned Poller::do_poll(int timeout)
70 if(objs_changed || events_changed)
73 events_changed = false;
79 platform_poll(timeout);
81 return poll_result.size();
85 PollEvent platform_poll(EventObject &, PollEvent, int);
87 PollEvent poll(EventObject &obj, PollEvent pe)
89 return platform_poll(obj, pe, -1);
92 PollEvent poll(EventObject &obj, PollEvent pe, const Time::TimeDelta &timeout)
94 if(timeout<Time::zero)
95 throw invalid_argument("poll");
97 return platform_poll(obj, pe, static_cast<int>(timeout/Time::msec));