在我的應用程序中,我使用了OOP的類,繼承等功能。 我還沒有在應用程序中使用任何線程,但仍需要100%的CPU週期。 任何人都可以幫助我找出可能的原因是什麼?C++應用程序在一段時間後需要100%cpu週期
回答
除非你正在運行的一些函數,它的時間大量做非常複雜的'事情',它可能是由某種沒有停頓的循環引起的。尋找類似do {...} while (!exit);
解決它,你需要調用產生的時間到操作系統,並把在API調用sleep(x)
功能,有效地暫停你的程序的「X」毫秒的功能。如果你正在使用Windows,這可以通過#include <windows.h>
,然後把sleep(10);
在循環結束時完成。 '10'是任意的;但要注意的是較小的值往往兼任隨機的,任何低於33是好的,如果你有大量的圖形(30個FPS),以及100個左右是好事件驅動的事情,主要涉及點擊或菜單。
首先,100%的CPU使用率,當然不一定是一個問題。如果該過程執行大量計算,而不是例如IO,100%的CPU使用率可能是完全健康的,並且實際上是理想的。
但是,如果你確實覺得它是一個使用的CPU週期,雖然它不應該,這裏有一些一般的策略來應對是:
寫一段代碼,是不太可能導致此類問題第一名。使用單元測試(對輸入範圍有很好的覆蓋),並避免出現過於複雜的退出條件的循環。 (對於簡單的或標準的情況下,使用內置的算法,如
std::for_each
,std::generate
等,也有助於避免無限循環)。使用日誌信息,所以你可以跟蹤你的程序在做,甚至幾天後,由檢查日誌。如果您擔心由於大量日誌消息而增加的計算負擔,您可以實施它們,以便有運行時間甚至編譯時選項來打開或關閉它們或選擇詳細程度。有各種日誌框架來幫助(甚至有一個SO question listing them,雖然它已關閉,可能會被刪除)。
如果上述內容沒有幫助,並且您的情況與您在文章中描述的情況類似,請使用調試器來確定您的進程卡住的代碼部分。您可以在調試器中運行該程序如果需要,可以有幾天或幾周。當達到100%CPU使用率時,中斷並檢查調用堆棧以查看進程的位置。無限循環(或類似現象)可能發生在相對較高的級別上,因此您可能需要在堆棧中上下走動以瞭解循環發生的位置。您也可以繼續此過程並在稍後再次中斷。
- 1. C#應用程序過程在一段時間後掛起
- 2. XPending週期正在使CPU 100%
- 3. 一個方法調用是否需要一個CPU週期?
- 4. SQlite C#應用程序的一部分需要太長時間
- 5. xwiki需要100個CPU
- 6. akka線程在應用程序空閒時使用100%CPU
- 7. 應用程序不使用100%的CPU
- 8. 100%CPU使用率ASP.NET應用程序
- 9. '鎖'需要CPU時間嗎?
- 10. c#線程100%CPU
- 11. 在一段時間後關閉應用程序後
- 12. 需要一段時間才能應用CSS的角度應用程序
- 13. Tomcat應用程序在一段時間後沒有響應
- 14. AIR應用程序在一段時間後沒有響應
- 15. 節點應用程序在一段時間後無響應
- 16. Qt應用程序掛起100%CPU
- 17. Akka IO應用程序消耗100%cpu
- 18. node.js應用程序在一段時間後開始超時
- 19. 我需要與Android應用程序生命週期的協調
- 20. JOGL glTexSubImage2D吃高達100%cpu並需要時間
- 21. JSF生命週期階段執行期間CPU使用率高
- 22. Gradle:assembleDebug在加載應用程序之前需要一些時間
- 23. 應用程序用戶界面在一段時間後消失
- 24. C#串口線程,應用程序在一段時間後崩潰
- 25. 龍捲風應用程序定期停止幾秒鐘,100%CPU
- 26. 如何用xCode4測量iPhone4應用程序中C函數的CPU週期?
- 27. Java fx應用程序在一段時間後自動崩潰
- 28. 在一段時間後重置iOS應用程序
- 29. 在一段時間後恢復應用程序內購買
- 30. 應用程序在很長一段時間後意外關閉
沒有更多的信息?可能不是......編輯:你有多少個CPU? –
和你使用哪個操作系統?使用Top命令的Linux顯示100%,如果1個核心被100%利用,200%是2個核心被100%利用。等等。 – ChaosCakeCoder
睡眠(SOME_PERIOD);對於(;;); –