我第一次使用libevent并且一直遇到一个问题,试图让我的应用程序在调用read回调之前不运行。我也在使用bufferevents。基本上我正在做的是尝试避免在我的主应用程序循环中休眠,而是当有数据要从套接字读取时,OS唤醒进程(通过libevent)。有人知道怎么做吗?我在libevent的alpha版本中发现你可以将一个基本事件循环设置为EVLOOP_NO_EXIT_ON_EMPTY,但是从查看将用尽我的整个过程的libevent代码我相信。我还在this问题上读到,在Windows上设置套接字阻塞是个坏主意,这也是我没有把它作为解决方案的原因。我会用libuv和libev来标记它,因为它们相似并且可能有助于我的解决方案。
答案 0 :(得分:0)
你必须使用以下api,一些API可能已经过时你可以搜索谷歌新的。
struct event_base *base ;
struct event g_eve
base = event_init();
//after binding the socket register your socket for read event using below api
event_set(&g_eve, SockFd, EV_READ | EV_PERSIST, CallbackFunctin, &g_eve);
event_add(&g_eve, NULL);
event_base_dispatch(base);