QThread: Destroyed while thread is still running

Qt5已经分装了函数

void QThread::requestInterruption()
{
    Q_D(QThread);
    QMutexLocker locker(&d->mutex);
    if (!d->running || d->finished || d->isInFinish)
        return;
    if (this == QCoreApplicationPrivate::theMainThread) {
        qWarning("QThread::requestInterruption has no effect on the main thread");
        return;
    }
    d->interruptionRequested = true;
}

bool QThread::isInterruptionRequested() const
{
    Q_D(const QThread);
    QMutexLocker locker(&d->mutex);
    if (!d->running || d->finished || d->isInFinish) // 如果线程已经结束就。。。
        return false;
    return d->interruptionRequested;
}

在wile中用下面函数判断

while (!isInterruptionRequested())
{
     /////

     /////
}

在析构函数中调用

ThreadToDisks:: ~ThreadToDisks()
{
    requestInterruption();
    quit();
    wait();
}

参考:https://blog.csdn.net/u013372900/article/details/80405261

原文地址:https://www.cnblogs.com/herd/p/11656299.html

时间: 2024-08-03 18:45:57

QThread: Destroyed while thread is still running的相关文章

Qt5线程错误:QThread: Destroyed while thread is still running(执行runThread->exit(0))

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

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

这是由于线程未执行完毕,但提前关闭引起的,常规结束线程的步骤为: (1)disconect(.........) ;  //关闭所有与该进程对象关联的信号和槽(2)thread->quit();(3)thread->wait();(4)thread->deleteLater(); 实际测试,只用(2)(3)也行.

Qt之QThread(深入理解)

简述 前面,我们介绍了QThread常用的两种方式: worker-object 子类化QThread 下面,我们首先来看看子类化QThread在日常中的应用. 简述 子类化QThread 在主线程中更新UI 正常结束线程 更多参考 一般情况下,QThread进行耗时操作的同时会与UI进行交互,比如:显示进度.旋转等待...进行友好型的交互,让用户知道当前的操作. 子类化QThread 我们以更新进度条为例,来模拟一个耗时操作,并分享我们有可能在此过程中遇到的问题及解决办法. 首先,我们定义一个

Android多线程分析之二:Thread的实现

Android多线程分析之二:Thread 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前文<Android多线程分析之一:使用Thread异步下载图像>中演示了如何使用 Thread 处理异步事务.示例中这个 Java Thread 类都是位于 Framework 层的类,它自身是通过 JNI 转调 dalvik 里面的 Thread 相关方法实现的.因此要分析 Androd 中的线程,就需要分析这两层中的与线程相关的代码,这就是本文要

Worker Thread

http://www.codeproject.com/Articles/552/Using-Worker-Threads Introduction Worker threads are an elegant solution to a number of problems about concurrent processing; for example, the need to keep the GUI active while a computation is being performed.

c++11 Thread库初探

c++11中最重要的特性之一就是对多线程的支持了,然而<c++ primer>5th却没有这部分内容的介绍,着实人有点遗憾.在网上了解到了一些关于thread库的内容.这是几个比较不错的学习thread库的资源: Thread support library                    : http://en.cppreference.com/w/cpp/thread Cpp reference/thread                      : http://www.cpl

Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?

Thread.stop, Thread.suspend, Thread.resume被标记为废弃的方法.在查看JDK的文档时,提到了下面的参考文章,先是英文版,接着是中文翻译. Why is Thread.stop deprecated?Because it is inherently unsafe. Stopping a thread causes it to unlock all the monitors that it has locked. (The monitors are unloc

解析Qt中QThread使用方法

本文讲述的是在Qt中QThread使用方法,QThread似乎是很难的一个东西,特别是信号和槽,有非常多的人(尽管使用者本人往往不知道)在用不恰当(甚至错误)的方式在使用QThread,随便用google一搜,就能搜出大量结果出来.无怪乎Qt的开发人员 Bradley T. Hughes 声嘶力竭地喊you are-doing-it-wrong 和众多用户一样,初次看到这个时,感到 Bradley T. Hughes有 些莫名奇妙,小题大作.尽管不舒服,当时还是整理过一篇博客QThread 的使

性能分析之-- JAVA Thread Dump 分析综述

性能分析之-- JAVA Thread Dump 分析综述 一.Thread Dump介绍 1.1什么是Thread Dump? Thread Dump是非常有用的诊断Java应用问题的工具.每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数. 1.2 T