我正在尝试将libev用于基于事件的编程。但有一些事件由libev提供,如EV_READ, EV_WRITE, EV_TIMER ..
那么,是否可以拥有自己的自定义事件。
例如,我有来自套接字的连续消息流,我只对该消息流中的一种消息感兴趣。所以,它基本上就像
while(true)
{
Msg msg = getMessage();
if(msg != null && msg.id == ourId)
return msg;
}
所以,我想注册这类事件(只满足if
条件。)。它的定制活动对吗?如何将此事件指定给libev。
我的意思是在libev中我们这样指定..
ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ);
ev_io_start (loop, &stdin_watcher);
我看到任何我们可以检查自己事件的东西。有可能吗?
答案 0 :(得分:2)
不幸的是,您无法拥有自定义事件,因为libev不会对您的数据进行操作,只检查是否存在某些事件,或者您是否可以发送一些事件。
所以基本上,你必须:
EV_READ
ev_loop
,理想情况下使用EV_ONESHOT
和超时观察器。在此之后调用您的消息处理程序,它将检查消息队列并处理队列中的所有消息