关于libevent:libevent学习使用2
libevent 定时器libevent 的time-test.c形容了一个定时事件的应用。 根本流程和之前的signal事件类似: 初始化一个event base/* Initialize the event library */ base = event_base_new();新建一个事件应用event_assign初始化一个事件,并传入超时解决的处理函数,event_assign 函数最初一个参数是超时处理函数的参数。参数flags的EV_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解决 应用了bufferevent解决socket收发数据, 须要自定义读写和异样的处理函数。