2013-03-27 44 views
3

我试图使用libev用于基于事件的编程。但也有通过libev像EV_READ, EV_WRITE, EV_TIMER ..libev自定义事件

因此提供了一些事件,是有可能有我自己的自定义事件。

例如,我具有从插座的消息的连续流的我对仅在消息的该流的类型的消息。因此,它基本上像

while(true) 
{ 
    Msg msg = getMessage(); 
    if(msg != null && msg.id == ourId) 
     return msg; 
} 

所以,我想对这类事件寄存器(只if满足条件)。它是一个自定义事件吗?我该如何指定这个事件来解放。

我的意思是在libev我们指定这样的..

ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ); 
ev_io_start (loop, &stdin_watcher); 

我不力看不到任何东西,我们可以检查我们自己的活动。可能吗 ?

回答

2

不幸的是,你不能有一个自定义事件,因为libev不会与您的数据操纵,只是检查是否有一些,或者你可以把一些。

所以基本上,你必须:

  1. 创建EV_READ
  2. 观察者当观察者触发你的函数,检查是否有你想要的消息:
    • 如果是,推它到你的消息队列
    • 如果不是,就跳过它
  3. 运行ev_loop,理想情况下与EV_ONESHOT和超时观察。紧接着调用消息处理程序,这将检查消息队列和处理所有消息泰德在队列中