最開始使用Qt時就遇到過QT Gui失去響應的問題,我是用多線程的方式解決的,然而通常來說,多線程是會降低程序的運行速度。

之后,在使用QSqlQuery::execBatch()函數時,Qt Gui 又失去響應,雖然多線程可以解決,但是如果能用單線程很好解決的,最好不要用到多線程,因為多線程不僅容易拖慢程序的速度,編程及維護的難度也更大,能用簡單方法解決的,就不要用復雜的方法。

于是我再次搜索資料,期望在解決方案的選擇與解決步驟上,能夠得到一個全面而又細致的總結。


Witold Wysota 的文章https://doc.qt.io/archives/qq/qq27-responsive-guis.html#performinglongoperations 總結的非常不錯。

Jason Lee的翻譯: http://blog.csdn.net/jasonblog/article/details/5568589

所以本文是在此文基礎上的部分翻譯、理解與二次總結??傊?,有刪減,有補充,所以沒寫 '轉' 字。


一、問題的來源與分析

     首先,我們要知道 “為什么Qt Gui 會停止響應?”。簡明扼要的說就是:長時間的密集處理或等待阻塞了Qt的事件循環(huán),應用程序不能響應來自窗口系統(tǒng)的事件請求(《C++ Gui Qt4》 P135中有描述)。   那么多長算長呢?一秒鐘算長,兩秒鐘太長。

     其次,“ 何種情形下會發(fā)生該問題? ”??煞譃閮煞N情形:

網友評論