1 #include <msp/core/except.h>
2 #include <msp/core/systemerror.h>
3 #include "eventobject.h"
5 #include "handle_private.h"
7 #include "poll_platform.h"
14 void Poller::rebuild_array()
19 priv->handles.clear();
20 priv->handles.reserve(objects.size());
22 for(const PolledObject &po: objects)
23 priv->handles.push_back(*po.object->get_event_handle());
26 void Poller::platform_poll(int timeout)
31 DWORD ret = WaitForMultipleObjects(priv->handles.size(), &priv->handles.front(), false, timeout);
32 if(/*ret>=WAIT_OBJECT_0 &&*/ ret<WAIT_OBJECT_0+priv->handles.size())
34 const PolledObject &obj = objects[ret-WAIT_OBJECT_0];
35 poll_result.push_back(obj);
37 else if(ret==WAIT_FAILED)
38 throw system_error("WaitForMultipleObjects");
42 PollEvent platform_poll(EventObject &obj, PollEvent pe, int timeout)
47 DWORD ret = WaitForSingleObject(*obj.get_event_handle(), timeout);
48 if(ret==WAIT_OBJECT_0)
50 else if(ret==WAIT_FAILED)
51 throw system_error("WaitForSingleObject");