2013-03-12 171 views
0

libevent我已經添加下面的代碼?在libevent的使用EVLOOP_NONBLOCK

+0

你是什麼意思是這些語句相等? – 2013-03-12 09:59:45

+0

由於某種原因,我想將'event_base_dispatch(base)'更改爲'event_base_loop(base,EVLOOP_NONBLOCK | EVLOOP_ONCE)',但我無法評估風險。 – name5566 2013-03-12 11:36:08

回答

0

沒有,event_base_dispatch(base)調用等效於event_base_loop(base, 0),這意味着它既不首批事件(如event_base_loopEVLOOP_ONCE一樣)後停止,也沒有立即返回如果沒有事件準備(如event_base_loopEVLOOP_NONBLOCK一樣) 。

您可能需要閱讀libevent的偉大的書由尼克·馬修森寫:http://www.wangafu.net/~nickm/libevent-book/Ref3_eventloop.html

+0

感謝雷米。我想在事件循環中做一些事情,所以我嘗試使用'while(run)event_base_loop(base,EVLOOP_NONBLOCK | EVLOOP_ONCE)'而不是'event_base_dispatch(base)'。這是否有效率問題或其他風險? – name5566 2013-03-13 01:47:38

+0

在event_base_loop上循環(base,EVLOOP_NONBLOCK | EVLOOP_ONCE)效率稍低,僅執行event_base_dispatch()。我可以問你想做什麼嗎?您是否嘗試過使用計時器事件或使用event_base_loopbreak()? – 2013-03-13 09:35:06

+0

我有一個網絡線程和一個用戶線程,網絡線程調用事件循環的event_base_loop(細節:while(run){event_loop; MyUpdate();}')。我嘗試在用戶線程中調用函數'bufferevent_socket_connect',但它不工作(不是線程安全的?)。所以,我這樣做:用戶線程:將連接請求推送到請求緩衝區;網絡線程:1.循環請求緩衝區2.獲取連接請求3.調用buffervent_socket_connect進行連接。 – name5566 2013-03-14 07:02:03