ev = EV_READ | EV_WRITE; } else { if (what & EPOLLIN) ev |= EV_READ; if (what & EPOLLOUT) ev |= EV_WRITE; if (what & EPOLLRDHUP) ev |= EV_CLOSED; } if (!ev) continue; // 根据事件绑定的fd,事件类型以及触发方式激活事件 evmap
第一个是要添加的事件, 第二个参数作为事件的超时值(timer). 如果该值非NULL, 在添加本事件的同时添加超时事件(EV_TIMEOUT)到时间队列树(timetree), 根据事件类型处理如下: EV_READ => EVLIST_INSERTED => eventqueue EV_WRITE => EVLIST_INSERTED => eventqueue EV_TIMEOUT => EVLIST_...
ev_timeout:在event是定时事件时发生作用,并且是一个持久的定时事件(即ev_events包含EV_PERSIST,ev_evcallback.ev_closure包含EV_CLOSURE_EVENT_PERSIST),它存储的是相对时间,也就记录距现在多长时间后,再次激活event事件 ev_events:代表事件的类别和属性,类别包括EV_READ(读)、EV_WRITE(写)等。属性包括EV_PERSIT...
EV_WRITE 表“可写事件”。 如今,用户须要做的不过在合适的时候,将某些 ev_io 从 ev_loop 增加或剔除。一旦增加,下个循环即会检查 ev_io 所指定的事件有否发生;假设该事件被探測到,则 ev_loop 会自己主动运行 ev_io 的回调函数 callback();假设 ev_io 被注销。则不再检測相应事件。 不管某 ev_loop ...
event_set来设置event对象,包括所有者event_base对象, fd, 事件(EV_READ| EV_WRITE|EV_PERSIST), 回掉函数和参数,事件优先级是当前event_base的中间级别(current_base->nactivequeues/2) 设置监视事件后,事件处理函数可以只被调用一次或总被调用。 只调用一次:事件处理函数被调用后,即从事件队列中删除,需要在事...
event_set来设置event对象,包括所有者event_base对象, fd, 事件(EV_READ| EV_WRITE|EV_PERSIST), 回掉函数和参数,事件优先级是当前event_base的中间级别(current_base->nactivequeues/2) 设置监视事件后,事件处理函数可以只被调用一次或总被调用。 只调用一次:事件处理函数被调用后,即从事件队列中删除,需要在事...
_event_debug_assert_is_setup(ev); event_debug(( "event_add: event: %p (fd %d), %s%s%scall %p", ev, (int)ev->ev_fd, ev->ev_events & EV_READ ? "EV_READ " : " ", ev->ev_events & EV_WRITE ? "EV_WRITE " : " ", ...
Libev 支持八种事件类型,其中包括 IO 事件。一个 IO 事件用 ev_io 来表征,并用 ev_io_init() 函数来初始化: void ev_io_init(ev_io *io, callback, int fd, int events) 初始化内容包括回调函数 callback,被探测的句柄 fd 和需要探测的事件,EV_READ 表“可读事件”,EV_WRITE 表“可写事件”。
2.1.I/O事件(对应EV_READ、EV_WRITE) 下面提供了一个有所省略简单使用libevent返回系统时间的服务端程序片段。 1void get_time(int fd,short event,struct event *arg) /*获取系统时间并将其往回write*/ 2{ 3…… 4 localtime_r(&now,&t); 5 asctime_r(&t,buf); 6 write( fd,buf,strlen(buf) ...
shortev_ncalls; /* Allows deletes in callback */ short*ev_pncalls; } ev_signal; } ev_; //事件类型、标志可能的值是EV_TIMEOUT,EV_READ,EV_WRITE,EV_SIGNAL,EV_PERSIST...等 shortev_events; //回调函数的返回值 shortev_res; //事件的超时时间 ...