X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fio%2Fwindows%2Fpoll.cpp;h=cbd92fd39678417c59375277c4ab0bd802606109;hb=cbe2cb6c2ea41b3e264ec9e3c4978483c5758962;hp=e67225805f3964a970f6e6d8fb93f82cb616d376;hpb=609c9a508cfdc7b42c46c4f21d17639204165a00;p=libs%2Fcore.git diff --git a/source/io/windows/poll.cpp b/source/io/windows/poll.cpp index e672258..cbd92fd 100644 --- a/source/io/windows/poll.cpp +++ b/source/io/windows/poll.cpp @@ -1,3 +1,4 @@ +#include #include #include "eventobject.h" #include "handle.h" @@ -5,17 +6,21 @@ #include "poll.h" #include "poll_platform.h" +using namespace std; + namespace Msp { namespace IO { void Poller::rebuild_array() { - priv->handles.clear(); + if(!objs_changed) + return; - for(EventMap::iterator i=objects.begin(); i!=objects.end(); ++i) - priv->handles.push_back(*i->first->get_event_handle()); + priv->handles.clear(); + priv->handles.reserve(objects.size()); - objs_changed = false; + for(const PolledObject &po: objects) + priv->handles.push_back(*po.object->get_event_handle()); } void Poller::platform_poll(int timeout) @@ -26,9 +31,8 @@ void Poller::platform_poll(int timeout) DWORD ret = WaitForMultipleObjects(priv->handles.size(), &priv->handles.front(), false, timeout); if(/*ret>=WAIT_OBJECT_0 &&*/ rethandles.size()) { - EventMap::iterator i = objects.begin(); - advance(i, ret-WAIT_OBJECT_0); - poll_result.push_back(Slot(i->first, i->second)); + const PolledObject &obj = objects[ret-WAIT_OBJECT_0]; + poll_result.push_back(obj); } else if(ret==WAIT_FAILED) throw system_error("WaitForMultipleObjects");