2013-03-27 77 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和超時觀察。緊接着調用消息處理程序,這將檢查消息隊列和處理所有消息泰德在隊列中