2021-05-14 thread已经退出析构qtcreator中仍显示thread正在运行

2023-11-05

threadobject已经析构,thread.isrunning 是false,thread.isfinishing() 也是true,说明thread退出了,但是qtcreator调试窗口中还是可见Qthread状态竟然是正在运行,什么鬼, 特此记录下这个现象。待解。

记录:sockect只能在同一个线程对象中使用.在同一个线程创建的变量也只能在当前线程使用。在实际运用中,切记不可跨线程去使用其他线程里面的变量等。若业务需求必须要使用其他线程的数据,可通过信号槽 将该数据emit出去,由其他线程接收再进行使用

//重写QTcpServer中的incomingConnection函数,当监听到有连接时,会调用此函数
void MyServer::incomingConnection(qintptr socketDescriptor)
{
    qDebug() << "主线程id:" << QThread::currentThread();
    Thread1 *thread = NULL;

    QMap<int, Thread1*>::iterator iter = m_mapThread.find(socketDescriptor);
    if(iter != m_mapThread.end())
        thread = iter.value();
    else
    {
        thread = new Thread1(socketDescriptor);
        m_mapThread[socketDescriptor] = thread;
    }

    //connect(thread,SIGNAL(finished()),thread,SLOT(deleteLater()));//删除thread对象
    thread->start();
}

thread1.cpp
Thread1::Thread1(int socketDescriptor,QObject *parent) :
    QThread(parent)
{
    m_socketDescriptor = socketDescriptor;
}

Thread1::~Thread1()
{
    qDebug() << "调用线程1析构函数" << QThread::currentThread();
    if(m_socket != NULL)
    {
        delete m_socket;
        m_socket = NULL;
    }
}

void Thread1::run()
{
    qDebug() << "启动Thread1 run()函数" << QThread::currentThread();
    m_socket = new QTcpSocket();
    if(m_socket->setSocketDescriptor(m_socketDescriptor))
    {
        qDebug()<<"setSocketDescriptor  success!";
    }
    else
    {
        qDebug()<<"setSocketDescriptor  error!";
    }

    //创建线程2,处理socket槽函数
    Thread2 *thread2 = new Thread2(m_socket);
    thread2->start();


    QEventLoop loop;
    connect(thread2, SIGNAL(finished()),&loop, SLOT(quit()));//阻塞thread1,直到thread2退出run()
    loop.exec();

    //删除thread2
    if(thread2 != NULL)
    {
        delete thread2;
        thread2 = NULL;
    }
    qDebug() << "退出Thread1 run()函数" << QThread::currentThread();
}
thread2.cpp
Thread2::Thread2(QTcpSocket *socket,QObject *parent) :
    QThread(parent)
{
    m_socket = socket;
}

Thread2::~Thread2()
{
    qDebug() << "调用Thread2析构函数" << QThread::currentThread();
}

void Thread2::run()
{
    qDebug() << "启动Thread2 run()函数" << QThread::currentThread();

    connect(m_socket,SIGNAL(readyRead()),this,SLOT(readData()));

    QEventLoop loop;
    QObject::connect(m_socket, SIGNAL(disconnected()), &loop, SLOT(quit()));//socket断开退出thread2 run()函数
    loop.exec();

    qDebug() << "退出Thread2 run()函数" << QThread::currentThread();
}

void Thread2::readData()
{
    qDebug() << "[" << QThread::currentThread() << "]" << "读取客户端数据:" << m_socket->readAll();
}
test.cpp
void Dialog::on_pushButton_clicked()
{
    int isz = m_server->m_mapThread.size();
    QMap<int, Thread1*>::iterator iter = m_server->m_mapThread.begin();
    while (iter != m_server->m_mapThread.end())
    {
        int h = iter.key();
        Thread1* th = iter.value();
        if(th->isFinished())
            qDebug()<<"h:"<<h<<"thread is finished";
        if(th->isRunning())
            qDebug()<<"h:"<<h<<"thread is isRunning";
        iter++;
    }
}

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2021-05-14 thread已经退出析构qtcreator中仍显示thread正在运行 的相关文章

  • 在高 dpi Windows 平台上自动重新缩放应用程序?

    我正在编写一个需要在高 dpi Windows 192dpi 而不是 96dpi 上运行的 Qt 应用程序 不幸的是 Qt 框架尚不支持高 dpi 至少在 Windows 上 因此我的应用程序及其所有元素看起来只有应有尺寸的一半 有没有办法
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 如何向同一个 QMenu 添加多个 QAction?

    我正在尝试实现 Qt 菜单自定义 并且我提供了一个功能来添加相同的功能QAction在同一个人民币上下文菜单中多次 但是当我尝试这样做时 myMenu gt addAction myAction myMenu gt addAction my
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 如何在qt中创建正确的退出按钮

    我正在尝试创建一个退出按钮来正确关闭我在 QT 中制作的 GUI 我尝试通过以下方式执行此操作 include
  • 如何从 matlab 调用 Qtproject?

    我在 matlab 中有一个函数可以写入一个 file txt 我在 qt 项目中使用它 So 当我使用 unix 获取要运行的 qt 编译可执行文件时 我有一个 Matlab 文件 但出现错误 代码 unix home matt Desk
  • Qt:删除富文本

    对于明文有QFontMetrics elideText https doc qt io qt 5 qfontmetrics html elidedText https doc qt io qt 5 qfontmetrics html eli
  • QFileInfo::isWritable() 在 Windows 7 上具有完全权限时返回 false

    QFile file filePath QFileInfo fileInfo file file open QIODevice ReadWrite or WriteOnly if fileInfo isWritable Log error
  • 面向 Delphi 开发人员的 Qt

    有人知道为 Delphi C Builder VCL 开发人员解释 Qt 的书籍或教程吗 对于具有该背景的开发人员来说 学习 Qt 的最佳方法是什么 我对如何使用 Qt 完成我知道如何在 Delphi 中完成的事情特别感兴趣 例如 Qt 相
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 将 C++ 代码(本机客户端)移植到浏览器(Web 应用程序)

    我有一个使用 Qt creator SDK 编写的 C 模块 我想将此代码移植到任何网页上运行 而不会对最终用户损害源代码 用户应该能够在任何浏览器 Chrome Firefox Safari Explorer 上看到此模块的输出 而无需安
  • PyQt 和 QSignalMapper/lambdas - 多个信号,单槽

    我在 PyQt 的菜单上有一个操作列表 每个操作对应我想要显示的每个不同的提要 所以我有一个 Y 将活动源设置为 Y Z 将其设置为 Z 等等 对于网络漫画阅读程序 我的菜单上都有 并且觉得自动化方法可能更好 而不是每次都打字 类似于将其添
  • QFileDialog 作为 TableView 的编辑器:如何获取结果?

    我正在使用一个QFileDialog作为某些专栏的编辑QTableView 这基本上有效 对一些焦点问题取模 请参阅here https stackoverflow com questions 22854242 qfiledialog as
  • C++ QT libXL 错误:“启动期间程序退出,代码为 0xc0000135”

    我正在尝试编写一个使用 libXL 的 QT 应用程序 但是当我尝试编译时 我收到一个弹出框 显示 During Startup program exited with code 0xc0000135 我已经准确地找出了哪一行导致了问题 它
  • 运行最新版本时没有“最新”消息?

    我正在尝试使用Sparkle https sparkle project org与 Qt Go 的绑定 https github com therecipe qt app 闪光 m import
  • MapItemView 在 dataChanged 信号后不会更新

    我正在使用 QMLMapItemView使用 C 的组件QAbstractListModel基于模型 这MapItemView当模型重置时 或者每当添加新项目或删除现有项目时 工作正常 但是 那MapItemView不反映对已添加项目的更改
  • 在另一个中使用 QAbstractListModel

    我在尝试使用 Qt QML 为我的应用程序开发数据模型时遇到问题 我已经用过一个QAbstractListModel能够将海关数据模型从 C 传递到 QML 并且它对于简单模型 例如基于字符串和布尔的模型 来说就像一个魅力 但现在我需要建立
  • qvariant 作为 qhash 中的键

    我想创建一个带有 QVariants 键的数据结构 它看起来像这样 QHash
  • 如何通过信号和槽传递参数?

    我的 GUI 包括LineEdit and a 按钮 当 的时候按钮单击后 插槽clicked 叫做 我想在之间建立信号槽关系clicked 作为信号和doSomething 作为插槽 问题是doSomething 无权访问 UI 并且do

随机推荐

  • 深入解析G1垃圾收集器与性能优化

    本文详细介绍G1垃圾收集器的参数配置 如何进行性能调优 以及怎样对GC性能进行分析和评估 文章目录 0 G1简介 1 垃圾回收阶段简介 2 纯年轻代模式的垃圾收集 3 混合模式的垃圾收集 4 标记周期的各个阶段 5 常用参数与默认值 XX
  • 整合Windows 7 / server 2008更新补丁包

    哈喽 大家好 今天主要是给学习win7和server2008的小伙伴准备的一样好东西 UpdatePack7R2 这是是由俄罗斯大神Simplix制作的Windows 7 和 server 2008的更新补丁离线安装包 里面整合了Windo
  • 数组中子数组和为固定值的题目汇总

    开头附件一部分数组去重的知识 C 中数组 Vector中去除重复元素 unique函数是一个去重函数 去除相邻中的重复元素 只留一个 其中 最关键的是 并不是删除并不是把重复的元素删除 而是全部放倒数组的后面 因为 unique只是去除 相
  • linux查询端口冲突情况

    1 netstat anp grep 80 输出 unix 2 ACC STREAM LISTENING 48026 7112 master private tlsmgr 若 出现LISTEN则冲突 LISTENING正常
  • 01-----关于更换网络之后,xshell无法连接虚拟机(之前还能连接)

    1 解析 我本来在一个网络中是正常能使用xshell连接我的本地虚拟机的 但是后面回到家里的wifi后 突然就连不上了 经过排查 发现是新的wifi的与原本建立好的网络环境不一致 具体是ip不在同一网段 重新配置一下 例如我是这样操作的 看
  • Visual studio Code的clangd插件一篇通,上乘的C/C++开发环境配置

    系列文章 Visual studio Code的C C 开发环境搭建 Visual studio Code的clangd插件一篇通 上乘的C C 开发环境配置 苦于微软出品的 C C 插件久矣 时不时就会出现代码提示失效 跳转失败的问题 现
  • 算法实现之二叉树的前序、中序、后序递归和非递归遍历以及层序遍历

    概述 二叉树是每个节点最多有两个子树的树结构 通常子树被称作左子树和右子树 二叉树的遍历通常分为 前序遍历 中序遍历 后序遍历和层序遍历 前序遍历 前序递归遍历算法 访问根结点 gt 递归遍历根结点的左子树 gt 递归遍历根结点的右子树 中
  • linux tr命令完整,linux tr命令详解

    tr命令可以对来自标准输入的字符进行替换 压缩和删除 下面由学习啦小编为大家整理了linux tr命令的相关知识 希望对大家有帮助 linux tr命令用途 tr命令可以对来自标准输入的字符进行替换 压缩和删除 它可以将一组字符变成另一组字
  • 大数据分析——云南的花样之旅

    认真阅读过小伙伴们的评论 最终将我们此行的目的地定在了山清水秀的云南了 对于从小生活在北方的小编 对云南还是抱着不小的憧憬呢 下面就来看看数据人员给出的官方数据吧 首先我们就来说说久负盛名的云南大理吧 先看一下数据 看了下数据结果 小编才知
  • 【好工具】不需要知道地址,一个命令就能下载任何文件,它不香吗?

    今天介绍一款浏览器插件 可以直接将文件的下载链接直接转换成 Linux 命令 方便无操作界面的电脑下载无直链的文件 作者 编辑 Leong 导言 使用过 Linux 的朋友可能知道 大部分软件都是不支持 Linux 系统的 Windows系
  • List及String类的Contains方法底层源码解析

    public boolean Contains Object o 此处的o即为contains方法中的参数对象 return indexOf o gt 0 如果数值 gt 0 则返回true public int indexOf Objec
  • mysql中的Date日期格式的问题:只有日期没有时间及格式化时间

    只有日期没有时间 把xml中的date改为timestamp 格式化最简单的方法 JsonFormat pattern yyyy MM dd HH mm ss timezone GMT 8 转载于 https www cnblogs com
  • day7pyecharts制图-组合图

    Pyecharts制图 标题一 柱状图 导入柱状图的类 from pyecharts charts import Bar 导入图标配置类 from pyecharts import options 基本的柱状图 1 创建图标对象 bar B
  • 在Linux上部署KVM和使用

    实验前 我们关闭防火墙 systemctl stop firewalld systemctl enable firewalld 如果我们之前安装过KVM或者有残余 可以先执行以下命令来清除一下 yum remove rpm qa egrep
  • oracle中常用的set命令

    time 2008 2 1author skate oracle中常用的set命令 前一阵在做数据库数据的转移 所以就写个shell脚本来自动化完成 用shell脚本生成sql脚本时 就要用到oracle的set的命令来去掉一些不需要的提示
  • JVM内存划分

    1 程序计数器 每一个线程都有自己的一个程序计数器 创建线程时被一起创建 用于记录当前字节码执行位置 例如一个线程在执行过程中被挂起 一定时间片后 又继续执行 此时需要进行现场恢复 那么就可以在对应的程序记录器中找到被挂起时的下一条指令将要
  • java中mybatis原理,mybatis的工作原理

    由以上图可以看出 mybatis框架在操作数据库时大致经过了8个步骤 对这8个步骤分析如下 1 读取mybatis配置文件mybatis config xml mybatis config xml配置文件作为mybatis的全局配置文件 配
  • C++多态

    多态是C 面向对象三大特性之一 多态分为两类 静态多态 函数重载 和 运算符重载属于静态多态 复用函数名 动态多态 派生类和虚函数实现运行时多态 静态多态和动态多态区别 静态多态的函数地址早绑定 编译阶段确定函数地址 动态多态的函数地址晚绑
  • 图像处理:摩尔纹

    文章目录 1 什么是摩尔纹 2 怎样消除摩尔纹 总结 1 什么是摩尔纹 什么是摩尔纹 当我们对着电脑屏幕拍照时 会发现规则的彩色条纹 那就是我们常说的摩尔纹 它是由于采样不足 离散图像数据混淆产生的 刚才说的在空域上的混淆产生的摩尔纹 时域
  • 2021-05-14 thread已经退出析构qtcreator中仍显示thread正在运行

    threadobject已经析构 thread isrunning 是false thread isfinishing 也是true 说明thread退出了 但是qtcreator调试窗口中还是可见Qthread状态竟然是正在运行 什么鬼