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

之后,在使用QSqlQuery::execBatch()函數(shù)時(shí),Qt Gui 又失去響應(yīng),雖然多線程可以解決,但是如果能用單線程很好解決的,最好不要用到多線程,因?yàn)槎嗑€程不僅容易拖慢程序的速度,編程及維護(hù)的難度也更大,能用簡(jiǎn)單方法解決的,就不要用復(fù)雜的方法。

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


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

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

所以本文是在此文基礎(chǔ)上的部分翻譯、理解與二次總結(jié)。總之,有刪減,有補(bǔ)充,所以沒寫 '轉(zhuǎn)' 字。


一、問題的來源與分析

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

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

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式