Qt4.8開發的軟體,只在windows跑,在用戶環境出現幾次卡頓不回應的現象,重啟軟體仍然卡頓不回應,重啟作業系統后軟體正常。
先說下軟體,軟體是需要長時間運行的,設計一些資料采集,曲線串列等等的界面,我的開發環境很穩定,用戶的環境中跑也很穩定,CPU穩定在10%左右,記憶體一百多M。但是呢出現了幾次情況。
我本地的開發環境,win10,Qt4.8 for vs2008,Qt Creator
第一種現象,用戶的幾臺計算經win8,win10,win7,平時跑都正常,有一次出現界面卡頓點擊不回應,重啟軟體也不管用,由于用戶計算機重來不關閉(幾個月),我要求用戶重啟計算機,重啟后軟體正常,我的解釋是,windows本身不穩定,長時間跑圖形界面軟體需要定期重啟。
第二個現象,最近用戶部署一臺新的計算機,win7,啟動軟體點擊滑鼠只有幾個控制元件會回應,具體現象:例如點擊按鈕,只有個別按鈕回應點擊,例如QTabWidget,點擊tab也沒回應,軟體中使用了多個QTabWidget,軟體重啟也不行,每次重啟軟體后回應的按鈕也不同;我做了一些嘗試,軟體啟動后,使用它tab鍵,可以切換不同按鈕的焦點,可以切換QTabWidget的tab焦點;另一個嘗試,我編譯了一個簡單的Qt程式,只有一個QTabWidget控制元件,幾個按鈕幾個editLabel,也有同一樣的現象,滑鼠點擊不能都回應,tab鍵可以切換各控制元件的焦點。
請教下這兩個現象怎么解釋,萬分感謝
uj5u.com熱心網友回復:
幾個說明1.這里兩個現象出現時,操作其它軟體是正常的,例如瀏覽器、word等,只是我的軟體不回應重啟也不行,必須重啟作業系統;
2.還沒有進行的測驗,出現問題時,操作其它Qt撰寫的軟體有沒有問題(非我撰寫發布的軟體);
uj5u.com熱心網友回復:
重啟軟體仍然卡頓不回應,重啟作業系統后軟體正常。軟體有點糟糕了。。。
個人感覺是內核物件 耗盡的感覺,
卡頓不回應,要查看cpu% 是否過高,是,則考慮有死回圈的bug了。可以把軟體打log,看卡死最后哪一部分
重啟也不行,說明不是死回圈的可能性。
uj5u.com熱心網友回復:
謝謝回復,windows內核物件我沒什么概念,還請對指導下;說是卡頓可能不太準確,根據現象“點擊按鈕,只有個別按鈕回應點擊...使用tab鍵,可以切換不同按鈕的焦點”,其實不像是主執行緒耗時之類的,更像是軟體對滑鼠回應不準確。
另外卡頓時CPU很低的,軟體CPU基本0%的樣子,整個系統CPU,記憶體都很低。
我想Qt的一些原理和windows的一些原理有什么沖突,導致Qt軟體長運行,將windows的某些內容耗盡,然后必須重啟作業系統。
uj5u.com熱心網友回復:
檢查是否資源泄漏的辦法之一:在任務管理器 行程 查看 選擇列 里面選擇:記憶體使用、虛擬記憶體大小、句柄數、執行緒數、USER物件、GDI物件
讓你的程式(行程)不退出,回圈執行主流程很多遍,越多越好,比如1000000次甚至無限回圈,記錄以上各數值,再隔至少一小時,越長越好,比如一個月,再記錄以上各數值。如果以上兩組數值的差較大或隨時間流逝不斷增加,則鐵定有對應資源的資源泄漏!
搜“GDI泄露檢測”
uj5u.com熱心網友回復:
記憶體泄漏或者GDI資源泄露?把任務管理器視窗打開看看~uj5u.com熱心網友回復:
重啟后可以,有很大的可能性進入死回圈。或者記憶體泄露造成需要進行磁盤交換的操作,嚴重影響程式運行uj5u.com熱心網友回復:
記憶體泄漏或GDI資源泄漏的可能性很大uj5u.com熱心網友回復:
請教下GDI泄露的話,是不是行程退出也不行,必須重啟作業系統么
uj5u.com熱心網友回復:
做了一些測驗,是不是可以說明有句柄泄露,導致最終必須重啟作業系統
uj5u.com熱心網友回復:
謝謝大神,查了程式申請的內核資源,不正確釋放的話,程式退出后作業系統不會識訓,導致內核資源泄露,累計的多了最終肯定要重啟計算機了。
我的方向定位到內核資源泄露,按找這個方向查
uj5u.com熱心網友回復:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/handleuj5u.com熱心網友回復:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/75360.html
標籤:基礎類
