Qt程式CPU佔用率較高的解決辦法

2021-09-22 10:22:16 字數 892 閱讀 8661

總的來說,qt程式cpu佔用率較高的原因可能有以下幾點:

1、在paintevent中呼叫update函式,造成無限迴圈

2、頻繁重新整理資料

3、複雜的浮點運算

4、死迴圈

5、paintevent裡操作太多

我遇到這個問題的程式是利用多個子執行緒(接收子執行緒)同時接收並解析網口的資料,同時另外乙個子執行緒(融合子執行緒)對多個子執行緒解析得到的資料進行融合處理,接收子執行緒和融合子執行緒之間通過qt的訊號-槽機制進行資料互動。

通過分析發現,各子執行緒執行之後均處於死迴圈狀態,即使此時沒有待接收/處理的資料,執行緒也會處於「空轉」狀態,由此導致了cpu的過分占用。

對於上述情況導致的cpu佔用率過高問題,可以根據子執行緒數量以及子執行緒迴圈中需要實時處理的資料量的多少來給子執行緒新增合適的休眠時間。

具體來說,可以使用qthread類中的sleep(或msleep、usleep)成員函式將執行緒暫時掛起一段時間,指定時間一過,執行緒將自動喚醒。

當執行中的子執行緒數量較少時,一般只要在子執行緒死迴圈的末尾使用sleep(0);即可,這樣理論上雖然不會是執行緒掛起任何時間,但是該呼叫會使執行緒自動放棄當前的時間片,使時間片可以被系統分配給另外的執行緒,這樣就可以有效減少執行緒占用的cpu資源。

但是若程式中同時執行的子執行緒較多,使用sleep(0);可能仍然無法降低程式cpu的佔用率,這時可以根據子執行緒迴圈中需要實時處理的資料量來指定合適的執行緒掛起時間。

由於我的程式中用到的子執行緒數量較多,經過測試,使用sleep(0);無法取得明顯的效果,最終指定每個子執行緒在迴圈的末尾掛起15ms,即:

while(true)

檢視CPU佔用率

檢視系統cpu佔用率 在跑一些程式,例如deep learning的時候,總是希望檢視一下cpu gpu 記憶體的使用率 1.cpu 記憶體 使用top命令 top 有乙個更直觀的監測工具,叫htopsu doap t ge tins tall htop s ud oapt get inst all...

CPU測試 檢視cpu佔用率

一 使用命令adb shell top m 10 s cpu t 顯示程序名稱,s 按指定行排序,n 在退出前重新整理幾次,d 重新整理間隔,m 顯示最大數量 如下圖 引數含義 pid progressidentification,應用程式id s 程序的狀態,其中s表示休眠,r表示正在執行,z表示...

如何檢視CPU 佔用率

以下是檢視cpu佔用率的乙個指令碼 export home arbsfr sfr entreprise sfre3 cpu record.sh and you can run it as below sh cpu record.sh bin sh usr ucb ps auxww grep cpu ...