2014-05-03 107 views
0

我嘗試使用ncurses庫編寫崔貪吃蛇遊戲和C.一切都工作正常,但是當我運行該程序的CPU使用率拍攝到50%(從8ish或更低開始)C時間延遲豬CPU

在評論了代碼的各個部分之後,我確定了主要的罪魁禍首是我使用的時間延遲函數,它確保了每90毫秒繪製一個新的幀。 (我從網站獲得的功能的源)

void waitFrom(clock_t init, long pauseclocks) 
{ 
    while((clock() - init) < pauseclocks); 
} 

,並在主要功能:

clock_t start; 
long pause = 90 * (CLOCKS_PER_SEC/1000); 
while(1) 
{ 
    start = clock(); 
    //game code 
    waitFrom(start, pause); 
} 
+2

你的問題是?繁忙的循環使用CPU,這就是它的工作原理。 – univerio

+0

你期望什麼?即使只是在循環內調用sched_yield也能改善這一點。 –

+0

也許最好是編寫代碼來處理由計時器驅動的事件。否則,也許使用[nanosleep](http://www.gnu.org/software/libc/manual/html_node/Sleeping.html)會減少CPU使用率。 –

回答

2

延遲將消耗一個單核的100% - 大概是你有一個雙核處理器?

usleep(90000) ; // 90ms 

您需要#include <unistd.h>usleep()

替換爲您的延遲。

這將暫停線程爲90ms,而不是忙等待