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_mutexattr_t attr;
90 pthread_mutexattr_init(&attr);
91 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
92 pthread_mutex_init(&
_mutex, &attr);
96 pthread_mutex_init(&
_mutex, NULL);
102 pthread_mutex_destroy(&
_mutex);
107 pthread_mutex_lock(&
_mutex);
112 pthread_mutex_unlock(&
_mutex);
124 DefaultWatches::iterator wi =
_watches.begin();
127 DefaultWatches::iterator wmp = wi;
138 DefaultTimeouts::iterator ti =
_timeouts.begin();
141 DefaultTimeouts::iterator tmp = ti;
164 DefaultWatches::iterator wi =
_watches.begin();
166 for (nfd = 0; wi !=
_watches.end(); ++wi)
168 if ((*wi)->enabled())
170 fds[nfd].fd = (*wi)->descriptor();
171 fds[nfd].events = (*wi)->flags();
172 fds[nfd].revents = 0;
181 fds[nfd].events = POLLIN | POLLOUT | POLLPRI ;
182 fds[nfd].revents = 0;
186 fds[nfd].events = POLLIN | POLLOUT | POLLPRI ;
187 fds[nfd].revents = 0;
192 int wait_min = 10000;
194 DefaultTimeouts::iterator ti;
200 if ((*ti)->enabled() && (*ti)->interval() < wait_min)
201 wait_min = (*ti)->interval();
206 poll(fds, nfd, wait_min);
209 gettimeofday(&now, NULL);
211 double now_millis =
millis(now);
219 DefaultTimeouts::iterator tmp = ti;
222 if ((*ti)->enabled() && now_millis >= (*ti)->_expiration)
224 (*ti)->expired(*(*ti));
228 (*ti)->_expiration = now_millis + (*ti)->_interval;
240 for (
int j = 0; j < nfd; ++j)
242 DefaultWatches::iterator wi;
246 DefaultWatches::iterator tmp = wi;
249 if ((*wi)->enabled() && (*wi)->_fd == fds[j].fd)
253 (*wi)->_state = fds[j].revents;
255 (*wi)->ready(*(*wi));
DefaultTimeouts _timeouts
virtual ~DefaultMainLoop()
virtual ~DefaultTimeout()
DefaultTimeout(int interval, bool repeat, DefaultMainLoop *)
DefaultWatch(int fd, int flags, DefaultMainLoop *)
static double millis(timeval tv)