2 #include <msp/core/algorithm.h>
3 #include "eventobject.h"
5 #include "poll_platform.h"
14 events_changed(false),
23 void Poller::set_object(EventObject &obj, PollEvent ev)
25 // Verify that the object has an event handle
27 obj.get_event_handle();
29 auto i = find_member(objects, &obj, &PolledObject::object);
40 events_changed = true;
48 if(objects.size()>=MAXIMUM_WAIT_OBJECTS)
49 throw logic_error("Maximum number of wait objects reached");
52 objects.push_back(PolledObject(&obj, ev));
56 unsigned Poller::poll()
61 unsigned Poller::poll(const Time::TimeDelta &timeout)
63 if(timeout<Time::zero)
64 throw invalid_argument("Poller::poll");
66 return do_poll(static_cast<int>(timeout/Time::msec));
69 unsigned Poller::do_poll(int timeout)
71 if(objs_changed || events_changed)
74 events_changed = false;
80 platform_poll(timeout);
82 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));