前言:event_base_dispatch的主要功能包括:初始化和参数检查、事件循环主逻辑、准备和检查回调的执行、事件调度与处理以及最终的退出逻辑。 其实在内部就是调用了epoll_wait 或者 select模式的select函数,获取内…
(1)事件循环:event_base_dispatch(),event_base_loop()。 (2)事件循环退出:event_base_loopexit(),event_base_break()。 事件处理 设置事件相对应的回调。 (1)如果是使用event对象,在event_new()会设置相对应的回调。 (2)如果IO由libevent处理,那么使用bufferevent_setcb()来设置回调。 void bufferevent_setcb...
这个循环将会运行event base,知道没有等待的或者活动的事件,或者其它的调用了event_base_loopbreak()或event_base_loopexit(). @param base the event_base structure returned by event_base_new() or event_base_new_with_config() event_base_new() 或者 event_base_new_with_config() 返回的event_base对象...
event_base_dispatch(base);//循环等待 event_free(ev_cmd); bufferevent_free(bev); event_base_free(base); printf("finished \n"); return 0; } //终端输入回调 void cmd_msg_cb(int fd, short events, void* arg) { char msg[1024]; int ret = read(fd, msg, sizeof(msg)); if( ret <...
struct event_base *base = event_base_new(); struct event ev; evutil_socket_t fd = 0; // 假设fd是一个有效的文件描述符 event_set(&ev, fd, EV_READ|EV_PERSIST, callback, NULL); event_base_set(base, &ev); event_add(&ev, NULL); event_base_dispatch(base); event_free(&ev); ev...
EVLOOP_NO_EXIT_ON_EMPTY:在没有事件在base上的时候不exit退出。比如一个线程发射一个base,另一个线程这时候就可以往这个base里添加事件。 默认api: intevent_base_dispatch(struct event_base*base); 不设置任何flag(flag=0)直接发射base 停止loop:
(), 很多程序里这里用的是event_init(),区别就是前者是线程安全的、而后者是非线程安全的,后者在其官方说明中已经被标志为过时的函数、且建议用前者代替,libevent中还有很多类似的函数,比如建议用event_base_dispatch代替event_dispatch,用event_assign代替event_set和event_base_set等,关于libevent接口的详细说明见...
event_base不停的检测委托的检测是实际是不是发生了, 如果发生了, event_base会调用对应的回调函数, 这个回调函数的用户委托检测事件的时候给的. 2.1设置事件循环 // 头文件#include<event2/event.h>intevent_base_dispatch(structevent_base* base);// 一般使用这个函数/* ...
;//连接服务端intflag=bufferevent_socket_connect(bev,(structsockaddr*)&sin,sizeof(sin));if(-1==flag){fprintf(stderr,"connect failed\n");return1;}bufferevent_enable(bev,EV_READ|EV_WRITE);event_base_dispatch(base);event_base_free(base);printf("done\n");return0;}staticvoidconn_writecb(...
创建线程池structevent*listeners[THREAD_NUM];for(inti=0;i<THREAD_NUM;i++){listeners[i]=event_new(base,listener,EV_READ|EV_PERSIST,on_accept,base);event_add(listeners[i],NULL);}event_base_dispatch(base);for(inti=0;i<THREAD_NUM;i++){event_free(listeners[i]);}event_base_free(base);...