最开始使用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的事件循环,应用程序不能响应来自窗口系统的事件请求(《C++ Gui Qt4》 P135中有描述)。   那么多长算长呢?一秒钟算长,两秒钟太长。

     其次,“ 何种情形下会发生该问题? ”。可分为两种情形:

网友评论