zoukankan      html  css  js  c++  java
  • qt调用quit()后未结束线程解决方案

    正常操作

    正常写Qt的多线程,需要继承QThread,然后重写run函数,调用start后,在run函数中实现子线程的运行,这个时候会开启事件循环,可以调用quit()函数来结束当前的线程。

    其他操作

    根据qt的官方文档,可以通过连接槽的方式,然后利用Qt::DiretionConnection来实现多线程。大概如下所示:

    QThread proxyThread = new QThread();
    connect(proxyThread, &QThread::started, this, &TestThread::runEx, Qt::DirectConnection);
    connect(this, &TestThread::finished, proxyThread, &QThread::quit);
    

    在RunEx函数末,emit finished()信号,即可调用quit来“尝试”结束proxyThread线程。

    但是如果在主线程中调用proxyThread->isRunning()的死循环来判断当前线程是否结束,得到的结果始终都是true。

    如果贸然的使用delete来释放线程,会让程序崩溃。

    看到网上有很多说法,比如说调用isFinished来判断,但是isFinished一直都是false。

    换句话说,quit()根本就没有让proxyThread结束掉。

    在查阅各种资料后,发现在“主线程”调用terminate()可以主动的结束子线程。

    也就是

    emit finished();
    proxyThread->terminate();
    

    即可正确结束线程,调用delete也不会让程序崩溃了。

  • 相关阅读:
    数据统计
    判断文件是否改变
    多列表统计之后的数组排序
    被弃用的php函数以及被那个代替
    curl数据采集
    MySQL教程
    使用多次join数据重复的问题
    ThinkPHP5高阶实战教程 --诠释为API开发而生
    SpringBoot使用thymeleaf模板
    SpringBoot与JPA
  • 原文地址:https://www.cnblogs.com/ligiggy/p/15219931.html
Copyright © 2011-2022 走看看