我正在尝试学习libevent以用于未来的项目。我试图创建一个事件,每次超时都调用它的回调函数。所有回调函数都打印出“timeout_cb called”到标准输出。
我的回调函数代码是:
static void timeout_cb(evutil_socket_t fd, short what, void *arg) {
printf("timeout_cb called");
}
我的活动代码是:
struct event *toEvent; // time out event do this every so often
toEvent = event_new(base, -1, EV_TIMEOUT, timeout_cb, NULL); // base is the event base
event_add(toEvent, &five_seconds); //five_seconds is a timeval struct with 5 seconds
程序将编译并运行,没有错误或警告,但它不打印回调函数中的短语。我在其他回调类型中使用了类似的printf语句来验证它们是否已被调用,并且函数内部已经到达了各种行,但这没有做任何事情。我等了30秒左右,但仍然没有打印到屏幕上。使用纯超时事件我做错了什么。
答案 0 :(得分:2)
你必须做
event_new(base, -1, 0, timeout_cb, NULL);
请注意,有一些方便的宏来添加定时器,evtimer_new(),evtimer_add(),请参阅docs