首页 > 编程语言 > 详细

pyqt5 重启相同线程错误:QThread: Destroyed while thread is still running

时间:2020-07-09 15:48:55      阅读:87      评论:0      收藏:0      [点我收藏+]

背景:

        把一个基于QObject的类的槽运行在另一个线程,我们可以用moveToThread的方法。

1 新建一个子线程类,编写槽函数和信号,MyClass *m_MyClass=new MyClass();
2 新建一个线程对象QThread *runThread=new QThread();
3 使用connect连接当前类与子线程的信号槽,以便触发线程及接收线程执行结果;
4 使用m_MyClass.moveToThread(runThread),将子线程类移到线程中执行;
5 runThread->start(),开启线程。

  以下子线程名称统称为B线程,主线程统称为A线程;

       B线程是在后台不断的检测PC连接的设备,当检测到合适的设备连接成功后,A线程进行逻辑处理,此时B线程函数内部会直接return,等到A线程处理完连接设备的数据后,会再次新起一个B线程。(这里是因为A线程处理一次数据时间比较长,B线程没必要一直运行。)

      注:  此处之所以不用互斥量来加锁,直接让B线程阻塞是因为担心死锁,而且本身程序比较小,耗用内存和CPU什么的都非常小,重启一个B线程也不会有影响。

 

问题:

      但是B线程函数内部会直接return并不代表线程结束(归根结底还是自己不了解如何调用),所以直接再次调用runThread.start()会报错   QThread: Destroyed while thread is still running

 

解决方法:

  再次调用runThread.start()之前添加两行:

1 runThread.quit()
2 runThread.wait()

 

pyqt5 重启相同线程错误:QThread: Destroyed while thread is still running

原文:https://www.cnblogs.com/jiangyibo/p/13273896.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!