QT/C++ 多线程时,工作界面的样式频繁改变导致程序奔溃的问题

2023-11-06

QT/C++ 多线程时,工作界面的样式频繁改变导致程序奔溃的问题

一、错误现象与原因

最近在学习QT,遇到了一点问题,是关于工作线程与UI线程的,其主要问题为:我的工作线程是一个死循环,当我点击按钮进入工作线程,我的工作线程用emit发送一个信号,通知UI界面发生改变但是我遇到了如下异常。
工作界面图
这里是程序报错时候
出现这个错误的主要原因是我们的界面变换太频繁,当我们给信号发射函数加上一个延时时,便不再报错。


二、解决办法

加入一个延时函数即可
关于延时函数的加入有两种方法
1.
这是一个阻塞的方法,不推荐使用

QThread::sleep(1);//延时一秒,程序会卡在这里

2.延时函数,非阻塞方法可用

#include <QTime>//这是头文件

QTime delayTime = QTime::currentTime().addMSecs(1000);	//在当前时间上增加3S
		              while (QTime::currentTime() < delayTime);`

总结

为什么会出现这样的原因我也不知道,我排查了好久也找不到为什么,也许可能只是UI界面变换太快,导致了错误吧!以后如果弄懂了为什么我再来把为什么出错给补上。

源码

new2.cpp文件

#include "new2.h"
#include "test_4.h"
#include <QTime>
new2::new2() {

}
void new2::run() {
	while (true) {
		QTime delayTime = QTime::currentTime().addMSecs(1000);	//在当前时间上增加3S
		while (QTime::currentTime() < delayTime);
		//QThread::sleep(1);
		updatePktCount();
	}
}

new2,h文件

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_test_4.h"
#include "new2.h"
class test_4 : public QMainWindow
{
    Q_OBJECT

public:
    test_4(QWidget *parent = Q_NULLPTR);
	
	new2 *Now_Temp=NULL;

private slots:
	void function(bool checked);
	void updateCapCalculate();

private:
    Ui::test_4Class ui;
};

工作界面test4.cpp文件

#include "test_4.h"
#include "qdebug.h"
#include "new2.h"
#include "qmutex.h"

QMutex qmutex;
test_4::test_4(QWidget *parent)
    : QMainWindow(parent)
{
	
	
    ui.setupUi(this);
	connect(
		ui.pushButton,
		SIGNAL(clicked(bool)),
		this,
		SLOT(function(bool))
		);
}

void test_4::function(bool checked) {
	Now_Temp = new new2();
	bool ret2 = connect(Now_Temp, SIGNAL(updatePktCount()), this, SLOT(updateCapCalculate()), Qt::DirectConnection);
	Now_Temp->start();
}

void test_4::updateCapCalculate()
{
	qmutex.lock();
	static int i = 0;


	ui.lineEdit->setText(QString::number(i++));
	qDebug() << i << endl;
	qmutex.unlock();
}

https://blog.csdn.net/xiezhongyuan07/article/details/81169583

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

QT/C++ 多线程时,工作界面的样式频繁改变导致程序奔溃的问题 的相关文章

随机推荐

  • 我在腾讯做测10年,总结的7条生存经验

    简单做个自我介绍 我是一名测试工程师 从15年毕业到现在工作了6年 一路走过来 觉得自己很幸运遇到了很多伯乐 教会了我很多道理和职场经验 也非常荣幸在阿里工作过4年 搭建过蚂蚁金服的platuo测试框架 thrift测试框架 自动化测试平台
  • React源码分析(一)=> scheduler分析

    文章目录 1 前言 2 getCurrentTime 3 unstable scheduleCallback函数 4 scheduleHostCallbackIfNeeded 4 1 flushWork 4 2 flushFirstCall
  • 学习笔记实操手册

    https note youdao com s KP25iMDf https note youdao com s GAmVO7V 使用yum安装php72 https www cnblogs com JahanGu p 10439472 h
  • 编写一个使用指针的C函数,交换数组a和数组b的对应元素

    编写一个使用指针的C函数 交换数组a和数组b的对应元素 int a 5 1 2 3 4 5 int b 5 10 20 30 40 50 输出格式要求 a d 2d b d 2d 程序运行示例如下 a 0 10 a 1 20 a 2 30
  • QT应用部署流程

    参考链接 https www shuzhiduo com A LPdo07AGz3 1 Windows系统 Windows下使用QT自带工具windeployqt exe部署 windows gt command 切换到QT的工具目录 在c
  • signature=a195252fc5196d0fb82cccccc68b06b3,Gene signatures in wound tissue as evidenced by molecular...

    Wound induction in the chicken CAM Chick embryos were cultured for 10 days and CAMs were inflicted by parallel scalpel s
  • linux 数组里面是json,将JSON解析为shell脚本中的数组

    小编典典 如果您确实无法使用适当的JSON解析器 例如 1 请尝试 基于的解决方案 jq awk Bash 4 x readarray t values lt 3 print 4 myfile json Bash 3 x IFS n rea
  • lua 3.0 中 普通方法延时

    local delayTime cc DelayTime create 1 local callFunND cc CallFunc create function self pushjoystick end local seq cc Seq
  • 微信企业付款至零钱,状态处理中,status=PROCESSING的解决办法

    前段时间腾讯因为支付系统异常 更新了一些东西 然后就开始出现了这个问题 时不时的就会有一个两个状态为 处理中 的交易 但文档中并没有给出解决办法 尝试咨询了客服 给出了两个解决方案 1 把该笔交易当做失败处理 但以后这笔订单就不要再去折腾它
  • ESP8266 RTOS SDK 移植 u8g2 移植代码

    LED屏驱动ssd1306 屏幕128x64大小 1 移植代码核心 方法1 port c define SCL Pin GPIO SCL define SDA Pin GPIO SDA void delay us uint32 t time
  • Flink学习20:算子介绍reduce

    1 reduce简介 按照指定的方式 把每个元素进行累计执行 比如实现累加计算 示例 import keyByNameTest StockPrice import org apache flink api scala createTypeI
  • C++ 类学习总结(三) 类的拷贝赋值操作

    拷贝赋值操作 基本概念 拷贝构造函数 是一种构造函数 用同类型的对象初始化本对象的操作 即将新对象初始化为同类型另一个对象的副本 拷贝赋值运算符 接收一个本类型对象的赋值运算符版本 返回本对象的引用 类的默认函数 默认合成函数 当我们定义了
  • STM32F103 实验 PWM输出

    目录 本文 在上一章的基础上 将介绍如下内容 PWM输出实验 上一篇 STM32F103实验定时器 https blog csdn net qq 40318498 article details 96436994 正文 实验目的 使用TIM
  • Bridge:桥接模式

    将抽象部分与它的实现分离 使他们都可以独立地变化 抽象与实现的分离方法 是借助耦合 对于一个派生类而言 其从基类继承了抽象函数 并对抽象函数进行实现 这是常规的抽象与实现耦合的情况 而 若将函数实现的功能代码抽出 放到一个特定的实现类里 并
  • 设计模式(适配器模式)

    这里写目录标题 一 应用 1 1 概念 1 2 应用场景 二 实现 2 1 Python实现 2 2 Java实现 2 3 Golang实现 一 应用 1 1 概念 适配器是一种结构化的设计模式 主要是为了让不兼容的对象能够相互兼容 1 2
  • shell脚本——循环语句、sed、函数、数组、免交互expect

    目录 循环语句 for while 与 until sed 基本用法 sed脚本格式 函数 注意事项 定义函数和调用函数 脚本中函数的位置 查看函数 删除函数 函数返回值 函数的传参操作 使用函数文件 递归函数 数组 声明数组 数组切片 免
  • 记录 BL-604 环境配置

    与两个朋友组队参加个比赛 第一次正经的参加比赛 弥补之前一些遗憾吧 随便记录一下 下载博流的开发包 https gitee com bouffalolab bl mcu sdk 注册平头哥 https occ t head cn auth
  • NandFlash介绍、操作流程分析以及S5PV210的NandFlash控制器介绍

    1 NandFlash的型号与命名 注 本文以S5PV210芯片和K9F2G08芯片做分析 1 Nand的型号命名都有含义 拿K9F2G08来示例分析一下 K9F表示是三星公司的NandFlash系列 2G表示Nand的大小是2Gbit 2
  • Tomcat 各安装包选择及使用情景。

    本文参考 Apache Tomcat 8 5 51 官方 README 文件 当我们进入 Tomcat 主页下载 Tomcat 时 会看到各种安装包的选择 Binary Distributions 二进制发行包 Core zip pgp s
  • QT/C++ 多线程时,工作界面的样式频繁改变导致程序奔溃的问题

    QT C 多线程时 工作界面的样式频繁改变导致程序奔溃的问题 一 错误现象与原因 最近在学习QT 遇到了一点问题 是关于工作线程与UI线程的 其主要问题为 我的工作线程是一个死循环 当我点击按钮进入工作线程 我的工作线程用emit发送一个信