背景:

把一个基于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()

最新文章

  1. 剑指Offer:解决难题时的三大方法
  2. java 泛型接口示例
  3. [POJ1157]LITTLE SHOP OF FLOWERS
  4. Kinect帮助文档翻译之三 多场景
  5. Tdxtreelist变色
  6. bzoj 2754 [SCOI2012]喵星球上的点名(后缀数组)
  7. Android 判断数据库中是否存在某个表
  8. 最全ASCLL码
  9. div闪一下就消失
  10. T-SQL动态查询(1)——简介
  11. Hadoop Mapreduce 调优
  12. 静态方法(staticmethod)和类方法(classmethod)
  13. app已损坏,打不开。你应该将它移到废纸篓
  14. Qt.网络开发-通过http的get方式获取数据
  15. L252
  16. Windows 10原版ISO下载地址(持续更新)
  17. POJ 3268 Bookshelf 2 动态规划法题解
  18. activiti排他网关
  19. selenium_webdriver(python)获取元素属性值,浏览器窗口控制、网页前进后退,title/url打印
  20. VMware安装win7:units specified don't exist问题

热门文章

  1. 使用 rabbitmq 的场景?
  2. 怎样将 GB2312 编码的字符串转换为 ISO-8859-1 编码的 字符串?
  3. JVM组成结构以及各部分的功能
  4. 学习Python(一)
  5. spark 写csv文件出现乱码 以及写文件读文件总结
  6. Vue报错之"[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead......"
  7. servlet中的HttpServletResponse对象
  8. C语言类型转换原理
  9. 13_Invariance Principle_LaSalle's Theorem_不变性原理
  10. 一份你可以在 <head> 里设置的列表