34 #include <dbus/dbus.h>
41 return (tv.tv_sec * 1000.0 + tv.tv_usec / 1000.0);
45 : _enabled(true), _interval(interval), _repeat(repeat), _expiration(0), _data(0), _disp(ed)
48 gettimeofday(&now, NULL);
65 : _enabled(true), _fd(fd), _flags(flags), _state(0), _data(0), _disp(ed)
81 pthread_mutex_init(&
_mutex, NULL);
88 pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
93 pthread_mutex_init(&
_mutex, NULL);
99 pthread_mutex_destroy(&
_mutex);
104 pthread_mutex_lock(&
_mutex);
109 pthread_mutex_unlock(&
_mutex);
121 DefaultWatches::iterator wi =
_watches.begin();
124 DefaultWatches::iterator wmp = wi;
135 DefaultTimeouts::iterator ti =
_timeouts.begin();
138 DefaultTimeouts::iterator tmp = ti;
161 DefaultWatches::iterator wi =
_watches.begin();
163 for (nfd = 0; wi !=
_watches.end(); ++wi)
165 if ((*wi)->enabled())
167 fds[nfd].fd = (*wi)->descriptor();
168 fds[nfd].events = (*wi)->flags();
169 fds[nfd].revents = 0;
178 fds[nfd].events = POLLIN | POLLOUT | POLLPRI ;
179 fds[nfd].revents = 0;
183 fds[nfd].events = POLLIN | POLLOUT | POLLPRI ;
184 fds[nfd].revents = 0;
189 int wait_min = 10000;
191 DefaultTimeouts::iterator ti;
197 if ((*ti)->enabled() && (*ti)->interval() < wait_min)
198 wait_min = (*ti)->interval();
203 poll(fds, nfd, wait_min);
206 gettimeofday(&now, NULL);
208 double now_millis =
millis(now);
216 DefaultTimeouts::iterator tmp = ti;
219 if ((*ti)->enabled() && now_millis >= (*ti)->_expiration)
221 (*ti)->expired(*(*ti));
225 (*ti)->_expiration = now_millis + (*ti)->_interval;
237 for (
int j = 0; j < nfd; ++j)
239 DefaultWatches::iterator wi;
243 DefaultWatches::iterator tmp = wi;
246 if ((*wi)->enabled() && (*wi)->_fd == fds[j].fd)
250 (*wi)->_state = fds[j].revents;
252 (*wi)->ready(*(*wi));