2 This file is part of libmspframework
3 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
4 Distributed under the LGPL
13 Poller::Slot &Poller::add_pollable(Pollable *obj, short events)
15 MutexLock sl(slots_mutex);
17 slots.push_back(new Slot(obj, events));
18 if(!pfd_mutex.trylock())
28 int Poller::poll(int timeout)
34 for(list<Slot *>::iterator i=slots.begin(); i!=slots.end();)
36 if((*i)->get_object())
54 int result=::poll(&pfd[0], pfd.size(), timeout);
58 list<Slot *>::iterator j=slots.begin();
59 for(vector<pollfd>::iterator i=pfd.begin(); i!=pfd.end(); ++i)
61 if(i->revents&POLLNVAL)
65 while(j!=slots.end() && (!(*j)->get_object() || (*j)->get_object()->get_fd()!=i->fd))
69 (*j)->signal_event.emit(i->revents);
80 void Poller::rebuild_pfd()
83 pfd.reserve(slots.size());
84 for(list<Slot *>::iterator i=slots.begin(); i!=slots.end(); ++i)
86 if(!(*i)->get_object() || (*i)->get_object()->get_fd()<0)
89 pfd.push_back(pollfd());
90 pfd.back().fd=(*i)->get_object()->get_fd();
91 pfd.back().events=(*i)->get_events();
95 Poller::Slot::Slot(Pollable *o, short e):
99 obj->signal_deleted.connect(sigc::mem_fun(this, &Slot::obj_deleted));