QThread: Destroyed while thread is still running 解决方法

错误发生场景:

使用UI与逻辑分离,继承UI类,使用耗时比较长的操作时,界面会卡死

选择QThread的方法进行处理,继承QThread类,并在继承UI类中

self.get_unjudged_comments_thread = GetUnjudegedCommentsThread()
self.get_unjudged_comments_thread.my_signal.connect(self.get_unjudged_comments_success)
self.get_unjudged_comments_thread.start()

我这里代码的作用是点击pushButton后,连接后端,后端进行数据库查询并且将数据用socket返回给PyQt,这将耗费大量的时间,在等待槽函数处理时,界面会卡死。所以用QThread来处理。

其中GetUnjudegedCommentsThread()为我创建的继承的QThread类,再使用信号传递处理结果,这样看似万事大吉,但是在macOS下(windows没试过)会报QThread: Destroyed while thread is still running错误。

解决办法:在self.get_unjudged_comments_thread.start()后面跟一句self.get_unjudged_comments_thread.exec()保护一下就好了。。。网上解决方法大多行不通,行得通的太麻烦,特此记录

exec()在官方文档中的属性是protected,作用为使线程进入时间循环状态,并且处于wait状态,直到退出。

 

Hi,我是Barzarrhey~~致力于让技术更纯粹

你可能感兴趣的:(PyQt,PyQt5,Pyhton)