2012-05-06 28 views
0

據我所知,事件驅動程序需要一個主循環如主迴路和替代

while (1) { 

} 

我只是好奇,如果這個while循環可以花費較高的CPU使用率?有沒有其他方法可以在不使用主循環的情況下實現事件驅動的程序?

回答

3

你的例子是誤導。通常情況下,一個事件循環看起來是這樣的:

Event e; 
while ((e = get_next_event()) != E_QUIT) 
{ 
    handle(e); 
} 

關鍵的一點是,函數調用我們虛構get_next_event()泵功能將是慷慨和鼓勵上下文切換或任何調度語義適用於您的平臺,如果沒有事件發生,該功能可能會讓整個過程休眠,直到事件到達。

所以在實踐中沒有什麼可擔心的,如果你想在你的程序運行時處理無限量的信息,那麼沒有任何其他方法可以替代無限循環。

0

通常,像這樣的循環的問題是,雖然它正在做一件工作,但它不能做任何其他事情(例如,Windows SDK的舊協作式多任務處理)。下一次天真的跳躍通常是爲每件作品創造一條線索,但這非常危險。大多數人最終會得到一個通常在裏面有線程池的執行程序。然後,句柄調用實際上只是排隊工作,下一個可用線程將它排隊並執行它。併發線程數保持固定爲池中工作線程的總數,並且當線程沒有任何事情要做時,它們不會佔用CPU。