3

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

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

4

1 回答 1

1

不幸的是,你不能有一个自定义事件,因为 libev 不会处理你的数据,只是检查是否有一些,或者你是否可以发送一些。

所以基本上,你必须:

  1. 创建一个观察者EV_READ
  2. 当观察者触发你的函数时,检查是否有你想要的消息:
    • 如果是,将其推送到您的消息队列
    • 如果没有,请跳过它
  3. 运行ev_loop,理想情况下使用EV_ONESHOT超时观察器。之后立即调用您的消息处理程序,它将检查消息队列并处理队列中的所有消息
于 2013-09-29T12:23:23.417 回答