X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fwindows%2Fpoll.cpp;h=b3ee8ec9dda104712075891d33127b052b892885;hp=e67225805f3964a970f6e6d8fb93f82cb616d376;hb=292aed8e23ea543b089d5f2a73000de4640befe7;hpb=609c9a508cfdc7b42c46c4f21d17639204165a00 diff --git a/source/io/windows/poll.cpp b/source/io/windows/poll.cpp index e672258..b3ee8ec 100644 --- a/source/io/windows/poll.cpp +++ b/source/io/windows/poll.cpp @@ -5,17 +5,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(vector::const_iterator i=objects.begin(); i!=objects.end(); ++i) + priv->handles.push_back(*i->object->get_event_handle()); } void Poller::platform_poll(int timeout) @@ -26,9 +30,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 Slot &slot = objects[ret-WAIT_OBJECT_0]; + poll_result.push_back(slot); } else if(ret==WAIT_FAILED) throw system_error("WaitForMultipleObjects");