本文整理汇总了C++中EventHandler::fn方法的典型用法代码示例。如果您正苦于以下问题:C++ EventHandler::fn方法的具体用法?C++ EventHandler::fn怎么用?C++ EventHandler::fn使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类EventHandler
的用法示例。
在下文中一共展示了EventHandler::fn方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: select
//.........这里部分代码省略.........
foundTimeoutEvent = 1;
} else {
if (eh->tmout.tv_sec < abs_timeout.tv_sec ||
(eh->tmout.tv_sec == abs_timeout.tv_sec &&
eh->tmout.tv_usec < abs_timeout.tv_usec)) {
abs_timeout = eh->tmout;
}
}
}
}
if (foundReadEvent) {
rd = &readfds;
} else {
rd = NULL;
}
if (foundWriteEvent) {
wr = &writefds;
} else {
wr = NULL;
}
if (foundTimeoutEvent) {
gettimeofday(&now, NULL);
/* Convert absolute timeout to relative timeout for select */
timeout.tv_usec = abs_timeout.tv_usec - now.tv_usec;
timeout.tv_sec = abs_timeout.tv_sec - now.tv_sec;
if (timeout.tv_usec < 0) {
timeout.tv_usec += 1000000;
timeout.tv_sec--;
}
if (timeout.tv_sec < 0 ||
(timeout.tv_sec == 0 && timeout.tv_usec < 0)) {
timeout.tv_sec = 0;
timeout.tv_usec = 0;
}
tm = &timeout;
} else {
tm = NULL;
}
if (foundReadEvent || foundWriteEvent || foundTimeoutEvent) {
for(;;) {
r = select(maxfd+1, rd, wr, NULL, tm);
if (r < 0) {
if (errno == EINTR) continue;
}
break;
}
}
if (foundTimeoutEvent) gettimeofday(&now, NULL);
errno_save = errno;
es->nestLevel++;
if (r >= 0) {
/* Call handlers */
for (eh=es->handlers; eh; eh=eh->next) {
/* Pending delete for this handler? Ignore it */
if (eh->flags & EVENT_FLAG_DELETED) continue;
flags = 0;
if ((eh->flags & EVENT_FLAG_READABLE) &&
FD_ISSET(eh->fd, &readfds)) {
flags |= EVENT_FLAG_READABLE;
}
if ((eh->flags & EVENT_FLAG_WRITEABLE) &&
FD_ISSET(eh->fd, &writefds)) {
flags |= EVENT_FLAG_WRITEABLE;
}
if (eh->flags & EVENT_TIMER_BITS) {
pastDue = (eh->tmout.tv_sec < now.tv_sec ||
(eh->tmout.tv_sec == now.tv_sec &&
eh->tmout.tv_usec <= now.tv_usec));
if (pastDue) {
flags |= EVENT_TIMER_BITS;
if (eh->flags & EVENT_FLAG_TIMER) {
/* Timer events are only called once */
es->opsPending = 1;
eh->flags |= EVENT_FLAG_DELETED;
}
}
}
/* Do callback */
if (flags) {
EVENT_DEBUG(("Enter callback: eh=%p flags=%u\n", eh, flags));
eh->fn(es, eh->fd, flags, eh->data);
EVENT_DEBUG(("Leave callback: eh=%p flags=%u\n", eh, flags));
}
}
}
es->nestLevel--;
if (!es->nestLevel && es->opsPending) {
DoPendingChanges(es);
}
errno = errno_save;
return r;
}