libev自定义事件

时间:2013-03-27 11:04:24

标签: c++ asynchronous libev

我正在尝试将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);

我看到任何我们可以检查自己事件的东西。有可能吗?

1 个答案:

答案 0 :(得分:2)

不幸的是,您无法拥有自定义事件,因为libev不会对您的数据进行操作,只检查是否存在某些事件,或者您是否可以发送一些事件。

所以基本上,你必须:

  1. 使用EV_READ
  2. 创建观察者
  3. 当观察者触发您的功能时,请检查是否有您想要的消息:
    • 如果是,请将其推送到您的消息队列
    • 如果没有,请跳过它
  4. 运行ev_loop,理想情况下使用EV_ONESHOT和超时观察器。在此之后调用您的消息处理程序,它将检查消息队列并处理队列中的所有消息