2013-08-05 53 views
0

我有兩個程序,應該做同樣的事情,略有不同。除非用戶以某種方式停止遊戲,否則這兩個遊戲循環都會永久運行。其中一個程序的遊戲循環是實現並渲染的,另一個遊戲循環是空的,什麼都不做(只是聽用戶停止)。爲什麼空循環使用更多的CPU?

當我打開任務管理器來查看資源使用情況時,我發現具有空循環的程序使用14%的CPU,而實際繪製屏幕的程序使用約1-2%。

我關於這個問題的猜測如下:

我比較了這兩個程序的代碼,尋找差異,並沒有太多。然後,我想到渲染屏幕的循環可能受到其他因素的約束(例如像素髮送到屏幕,刷新率可能?)所以在CPU做它的事情之後,它將該線程休眠,直到其他東西完成。但是由於其他程序幾乎沒有任何功能,而且什麼都不做也很容易,所以CPU從不會讓該線程進入睡眠狀態並繼續運行。我缺乏知識來確認,如果這是原因,那麼我問你。這是發生這種情況的原因嗎? (獎金問題)如果是這樣,爲什麼CPU停在大約14%,並沒有達到100%?

謝謝。

+0

也許空循環沒有延遲間隔,這與繪製的東西得到了嗎? – UnknownError1337

回答

3

很難說某些沒有看到代碼,但畫到屏幕上,不可避免地會涉及到一些等待IO;多少取決於許多因素,包括同步+緩衝選項。我猜你的機器有8個處理單元(核心或核心*超線程),你的代碼是單線程的 - 即它最大化一個處理單元。

+0

'100/8 == 12.5'。我認爲14%是巧合,是程序「空轉」 – Bojangles

+0

Windows(我假設Windows自任務管理器參考以來)在我的經驗中對於正確計算這些計算非常不利。 此外,這裏可能有某種形式的包裝層(SDL,directx等)。這可能正確地產生並在單獨的實例上運行,這可以輕鬆地解釋額外的百分比。 –

+0

可能,你是對的。雖然有12.5%的程序和1.5%的系統空閒有一定的意義,但有很多未知因素需要考慮給出明確的答案。 – Bojangles

相關問題