2011-07-09 46 views
2

可能重複:
How would you implement a basic event-loop?高效的事件循環實現?

不是一個真正的特定語言的問題。什麼可能是一個有效的事件循環實現?到目前爲止,我只遇到過這樣的事情:

while (true) { 
    handleEvents(); 
    sleep(100); 
} 

,我不認爲這是最好的辦法 - 如果睡眠時間過短,它會吃大量的CPU,如果它的時間太長,應用程序將非常沒有響應。

那麼,有沒有更好的方法?

感謝

回答

4

最常見的模式是:

while (WaitForNextEvent()) { 
    HandleEvent(); 
} 

隨着WaitForNextEvent()返回false表示有沒有更多的事件來處理,而最重要的是,能夠執行阻塞等待爲下一個事件。

例如,事件源可能是文件,套接字,線程的消息隊列或某種其他的waitable object。在這種情況下,您可以保證HandleEvent()只在事件準備就緒時運行,並在事件準備就緒後立即觸發。

+0

謝謝,我GOOGLE了一些關於epoll,select,libevent和類似的東西,似乎他們做我想做的事:) – Justinas