libevent学习使用2

libevent 定时器 libevent 的time-test.c描述了一个定时事件的使用。
基本流程和之前的signal事件相似:
初始化一个event base

/* Initialize the event library */ base = event_base_new();

新建一个事件
使用event_assign初始化一个事件,并传入超时处理的处理函数,event_assign 函数最后一个参数是超时处理函数的参数。参数flagsEV_PERSIST表示该事件每次发生、并处理完后继续监听。如果不设置,此超时事件只处理一次。
/* Initialize one event */ flags = EV_PERSIST; //... event_assign(&timeout, base, -1, flags, timeout_cb, (void*) &timeout);

添加事件
使用struct timeval 设定超时事件,并将该结构传入event_add的第二个参数。
evutil_timerclear(&tv); tv.tv_sec = 2; event_add(&timeout, &tv);

开始监听处理事件
event_base_dispatch(base);

释放资源
event_free(signal_event); event_base_free(base);

信号处理函数
回调函数的参数如下:
@param fd An fd or signal @param events One or more EV_* flags @param arg A user-supplied argument. typedef void (*event_callback_fn)(evutil_socket_t, short, void *);

总结 1、信号事件、定时器事件
这两个流程基本相同,创建eventbase、创建事件、添加事件、执行event_base_dispatch。
2、TCP Server 监听事件
使用evconnlistener_new_bind 函数,该函数包含了创建事件,和TCP监听流程,需要自定义客户端接入的socket处理程序。
3、socket处理
【libevent学习使用2】使用了bufferevent处理socket收发数据, 需要自定义读写和异常的处理函数。

    推荐阅读