我需要创建使用事件malloc
,但我很茫然,其中释放他们,我不知道它是否被允许释放事件的回调函数内,如:
struct event *pkt_ev = (struct event *)malloc(sizeof(struct event));
evtimer_set(&pkt_ev, timer_cb, &pkt_ev);
event_base_set(base, &pkt_ev);
event_add(&pkt_ev, timeout);
回调函数timer_cb():
timer_cb(int fd, short ev, void* arg){
.......
free(arg); // here the arg is &pkt_ev
}
我最初的想法是:在回调函数后timer_cb()
被调用时,libevent的隐含的调用event_del(&pkt_ev)
但自从我释放&pkt_ev
回调里面,会有一个崩溃/异常event_del(&pkt_ev)
这样对吗?
但是,如果event_del(&pkt_ev)
不关心什么内容pkt_ev
点,它可能不是一个问题?
此外,在这个函数:
event_add(struct event *ev, struct timeval *timeout);
通过指向的内容ev
也应该得到了很多,一般应该是一个全局变量或它的寿命应涵盖事件循环(即事件循环功能运行时,它会通过访问指向的内容ev
)。 如何通过超时指向的内容? 应该指出超时内容涵盖事件循环?