2012-09-20 25 views
-4

在我的應用程序中,我使用了OOP的類,繼承等功能。 我還沒有在應用程序中使用任何線程,但仍需要100%的CPU週期。 任何人都可以幫助我找出可能的原因是什麼?C++應用程序在一段時間後需要100%cpu週期

+1

沒有更多的信息?可能不是......編輯:你有多少個CPU? –

+0

和你使用哪個操作系統?使用Top命令的Linux顯示100%,如果1個核心被100%利用,200%是2個核心被100%利用。等等。 – ChaosCakeCoder

+1

睡眠(SOME_PERIOD);對於(;;); –

回答

2

最可能的原因將是一個無限循環(如Jogojapan已經提到)。並發現它是使用調試器,看看該代碼被卡在開始使用高CPU)時,最好的辦法..

+0

謝謝KK.I嘗試調試器,但問題沒有轉載。只有我運行我的申請1-2天后,我才能看到此問題。 – Amar

+0

@Amar:如果您有時間進行測試,爲什麼不讓它在調試器中運行三天左右,並且一旦發現程序停滯不前就停下來? – ted

+0

@Amar。讓它運行2天或更長時間..當你看到你的應用程序正在耗盡所有的資源,那麼你可以將你的調試器附加到應用程序。 否則,您可以從@ted開始按照調試器運行您的代碼(但我個人不建議)。 –

1

除非你正在運行的一些函數,它的時間大量做非常複雜的'事情',它可能是由某種沒有停頓的循環引起的。尋找類似do {...} while (!exit);解決它,你需要調用產生的時間到操作系統,並把在API調用sleep(x)功能,有效地暫停你的程序的「X」毫秒的功能。如果你正在使用Windows,這可以通過#include <windows.h>,然後把sleep(10);在循環結束時完成。 '10'是任意的;但要注意的是較小的值往往兼任隨機的,任何低於33是好的,如果你有大量的圖形(30個FPS),以及100個左右是好事件驅動的事情,主要涉及點擊或菜單。

0

首先,100%的CPU使用率,當然不一定是一個問題。如果該過程執行大量計算,而不是例如IO,100%的CPU使用率可能是完全健康的,並且實際上是理想的。

但是,如果你確實覺得它是一個使用的CPU週期,雖然它不應該,這裏有一些一般的策略來應對是:

  1. 寫一段代碼,是不太可能導致此類問題第一名。使用單元測試(對輸入範圍有很好的覆蓋),並避免出現過於複雜的退出條件的循環。 (對於簡單的或標準的情況下,使用內置的算法,如std::for_eachstd::generate等,也有助於避免無限循環)。

  2. 使用日誌信息,所以你可以跟蹤你的程序在做,甚至幾天後,由檢查日誌。如果您擔心由於大量日誌消息而增加的計算負擔,您可以實施它們,以便有運行時間甚至編譯時選項來打開或關閉它們或選擇詳細程度。有各種日誌框架來幫助(甚至有一個SO question listing them,雖然它已關閉,可能會被刪除)。

  3. 如果上述內容沒有幫助,並且您的情況與您在文章中描述的情況類似,請使用調試器來確定您的進程卡住的代碼部分。您可以在調試器中運行該程序如果需要,可以有幾天或幾周。當達到100%CPU使用率時,中斷並檢查調用堆棧以查看進程的位置。無限循環(或類似現象)可能發生在相對較高的級別上,因此您可能需要在堆棧中上下走動以瞭解循環發生的位置。您也可以繼續此過程並在稍後再次中斷。

相關問題