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)
31 for(list<Slot *>::iterator i=slots.begin(); i!=slots.end();)
33 if((*i)->get_object())
51 int result=::poll(&pfd[0], pfd.size(), timeout);
55 list<Slot *>::iterator j=slots.begin();
56 for(vector<pollfd>::iterator i=pfd.begin(); i!=pfd.end(); ++i)
58 if(i->revents&POLLNVAL)
62 while(j!=slots.end() && (!(*j)->get_object() || (*j)->get_object()->get_fd()!=i->fd))
66 (*j)->signal_event.emit(i->revents);
76 void Poller::rebuild_pfd()
79 pfd.reserve(slots.size());
80 for(list<Slot *>::iterator i=slots.begin(); i!=slots.end(); ++i)
82 if(!(*i)->get_object() || (*i)->get_object()->get_fd()<0)
85 pfd.push_back(pollfd());
86 pfd.back().fd=(*i)->get_object()->get_fd();
87 pfd.back().events=(*i)->get_events();
91 Poller::Slot::Slot(Pollable *o, short e):
95 obj->signal_deleted.connect(sigc::mem_fun(this, &Slot::obj_deleted));