1. 程式人生 > >翻譯:Libevent參考手冊第三章:與事件迴圈一起工作 (五) (轉)

翻譯:Libevent參考手冊第三章:與事件迴圈一起工作 (五) (轉)

預設情況下,event_base_loop()函式執行event_base直到其中沒有已經註冊的事件為止。執行迴圈的時候,函式重複地檢查是否有任何已經註冊的事件被觸發(比如說,讀事件的檔案描述符已經就緒,可以讀取了;或者超時事件的超時時間即將到達)。如果有事件被觸發,函式標記被觸發的事件為“啟用的”,並且執行這些事件。

在flags引數中設定一個或者多個標誌就可以改變event_base_loop()的行為。如果設定了EVLOOP_ONCE,迴圈將等待某些事件成為啟用的,執行啟用的事件直到沒有更多的事件可以執行,然會返回。如果設定了EVLOOP_NONBLOCK,迴圈不會等待事件被觸發:迴圈將僅僅檢測是否有事件已經就緒,可以立即觸發,如果有,則執行事件的回撥。

完成工作後,如果正常退出,event_base_loop()返回0;如果因為後端中的某些未處理錯誤而退出,則返回-1。

為幫助理解,這裡給出event_base_loop()的演算法概要:

虛擬碼