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也不会让程序崩溃了。

  • 相关阅读:
    IM 融云 之 初始化及登录
    IM 融云 之 安装cocoapods 安装 SDK
    github desktop 下载
    iOS 架构模式
    IM 融云 之 通讯能力库API
    IM 融云 之 开发基础概念
    IM 之 融云
    php获得文件的属性
    js模拟复制
    linux修改yum源
  • 原文地址:https://www.cnblogs.com/ligiggy/p/15219931.html
Copyright © 2011-2022 走看看