Qt-线程1-Run

0. 写在前面

        一个应用程序一般只有一个线程,一个线程内的操作是顺序执行的,如果有某个比较耗时间的计算或操作,比如图像处理大数据图像、网络通信中的文件传输;在一个线程内操作时,用户界面就能冻结而不能及时响应。这种情况下,可以创建一个单独的线程来执行比较消耗时间的操作,并与主线程之间处理好同步与数据交互,这时候就是多线程的应用程序了。

1. 利用QThread类,创建

        (1)自定义一个类,继承于QThread       

class MyThread:public QThread
{public:void run();//线程处理函数(和主函数不是同一个线程)}void run()
{QThread::sleep(5);emit isDone();
}

        在Qt文件中新添加MyThread类,基类选择QObject,随后修改三处地方:

        (1)将#include<QObject>修改为#include<QThread>;

        (2)将MyThread类中,class MyThread : public QObject修改为class MyThread : public QThread;

        (3)将MyThread.cpp函数中,MyThread::MyThread(QObject *parent) : QObject(parent)修改为MyThread::MyThread(QObject *parent) : QThread(parent)。

### myThread.h ####ifndef MYTHREAD_H
#define MYTHREAD_H#include <QThread>
#include <QTimer>
#include <QDebug>class MyThread : public QThread
{Q_OBJECT
public:explicit MyThread(QObject *parent = nullptr);protected://QThread的虚函数//线程处理函数//不能直接调用,通过start()间接调用void run();signals:void isDone();public slots:
};#endif // MYTHREAD_H### widget.h ###
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "mythread.h"namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_pBtn_start_clicked();void dealDone();        //定时器槽函数void dealTimeout();     //现成结束槽函数void stopThread();      //停止线程槽函数private:Ui::Widget *ui;QTimer* timer1;MyThread* thread; // 线程对象
};#endif // WIDGET_H### mythread.cpp ###
#include "mythread.h"MyThread::MyThread(QObject *parent) : QThread(parent)
{}void MyThread::run()
{//复杂数据处理,需要耗时5ssleep(5);emit isDone();}### widget.cpp ###
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);timer1 = new QTimer();connect(timer1,&QTimer::timeout,this,&Widget::dealTimeout);//分配空间thread = new MyThread(this);connect(thread,&MyThread::isDone,this,&Widget::dealDone);//当按窗口右上角关闭窗口时,窗口触发destroyedconnect(this,&Widget::destroyed,this,&Widget::stopThread);
}Widget::~Widget()
{delete ui;
}void Widget::on_pBtn_start_clicked()
{if(timer1->isActive() == false){//启动定时器timer1->start(100);}
//    QThread::sleep(5);//    //处理完之后,关闭定时器
//    timer1->stop();
//    qDebug() << "Over!";//启动线程thread->start();}void Widget::dealDone()
{qDebug() << "It is Over!";timer1->stop();//关闭定时器}void Widget::dealTimeout()
{static int i = 0;i++;ui->lcdNumber->display(i);}void Widget::stopThread()
{thread->quit();thread->wait();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

34-2 SSRF(服务器端请求伪造)漏洞 - SSRF相关函数

简介 file_get_contents(): 功能: 该函数用于将整个文件读取到一个字符串中,可以用于获取本地或远程文件的内容。风险: 如果未经验证的用户输入作为参数传递给该函数,并且允许读取远程文件,则可能导致SSRF漏洞,攻击者可以利用该漏洞读取服务器内部的文件或者执行未经授权…

C++面试经典问题

常见问题&#xff1a;智能指针、多态、虚函数、STL原理、链表、排序、二叉树、设计模式、线程进程、内存 对象所有权 在接触智能指针之前首先要理解对象的所有权是什么&#xff0c;在这之前我们总是用new和delete来进行内存的申请与释放&#xff0c;在这种堆内存分配的方式中…

【退役之重学Java】关于lambda表达式和函数式接口

使用 lambda 表达式为作为实参&#xff0c;传递给形参&#xff0c;形参为函数式接口&#xff0c;此lambda表达式没有指定类型&#xff0c;如何能匹配函数式接口的形参类型呢&#xff1f; 函数式接口作为参数&#xff0c;实参可以直接用lambda表达式吗&#xff0c;是什么原理 函…

【嵌入式DIY实例】-MODBUS串行通信

MODBUS串行通信 文章目录 MODBUS串行通信1、什么是RS-4852、MAX485 TTL转RS485转换器3、硬件准备4、代码实现4.1 主机和从机之间简单通信4.2 主/从机之间LED控制在本文中,我们将介绍如何使用 MAX485 MODBUS 在Arduino之间进行串行通信。 我们将使用 Arduino nano 板和 MODBUS …

springboot国际化多语言

1,新建国际化多语言文件 在resources目录下新建 messages.properties 其他语言的文件 编辑messages.properties文件,下方从text切换到Resource Bundle ,即可对照着编辑多语言文件 (如果没有找到Resource Bundle,先在settings->plugins中安装Resource Bundle Editor) 2,配…

ComfyUI如何操作?借鉴文章有官方ComfyUI 手册、COmfyui初学者教程等

ComfyUI 是一个基于节点的用户界面&#xff0c;用于构建生成图像的工作流程。它通过将不同的节点连接在一起来实现这一功能。 ComfyUI 的基本操作步骤&#xff08;“精”简版&#xff09; 1. 安装 ComfyUI 访问 ComfyUI 的 GitHub 页面&#xff0c;根据您的操作系统&#xff08…

Lumos学习王佩丰Excel第二讲:单元格格式设置

今天学会GIF录制了&#xff0c;分享知识会更简便一些&#xff0c;话不多说&#xff0c;开始吧~ 一、美化表格 1、设置单元格格式的路径 从菜单栏进入&#xff1a; 选中区域&#xff08;单元格&#xff09;- 右键“设置单元格格式”&#xff1a; 2、合并单元格 合并一行 批量…

5.3 用栈翻转数组,动态规划求斐波那契数列

5.3 用栈翻转数组&#xff0c;动态规划求斐波那契数列 1. 用栈翻转数组 assume cs:code,ds:data,ss:stack data segmentarr dw 1111h,2222h,3333h,4444h,5555h,6666h,7777h,8888hres db 800 dup(0) data endsstack segmentdb 100 dup(0) stack endscode segmentstart:mov ax,…

YOLOv8模型剪枝实战:Network Slimming网络瘦身方法

课程链接&#xff1a;YOLOv8模型剪枝实战&#xff1a;Network Slimming网络瘦身方法_在线视频教程-CSDN程序员研修院 YOLOv8是一个当前非常流行的目标检测器&#xff0c;本课程使用Network Slimming&#xff08;网络瘦身&#xff09;剪枝方法对YOLOv8进行模型剪枝&#xff0c;…

力扣347. 前 K 个高频元素

思路&#xff1a;记录元素出现的次数用map&#xff1b; 要维护前k个元素&#xff0c;不至于把所有元素都排序再取前k个&#xff0c;而是新建一个堆&#xff0c;用小根堆存放前k个最大的数。 为什么是小根堆&#xff1f;因为堆每次出数据时只出堆顶&#xff0c;每次把当前最小的…

手动实现Tomcat底层机制+自己设计Servlet

文章目录 1.Tomcat整体架构分析自己理解 2.第一阶段1.实现功能2.代码1.TomcatV1.java 3.调试阶段1.阻塞在readLine导致无法返回结果 4.结果演示 3.第二阶段1.实现功能2.代码1.RequestHander.java2.TomcatV2.java 3.调试阶段1.发现每次按回车会接受到两次请求 4.结果演示 4.第三…

《牛客》-C小红的字符串构造

思路&#xff1a;我以符合条件的最极限情况来安排回文&#xff0c;即两个两个字符为一组回文&#xff0c;保证其不参与其他回文字符串的构造&#xff0c;以这样子的形式输出k个&#xff0c;剩下的都只输出不连续的当个字符&#xff08;‘a’i%26&#xff09; 看不到&#xff1…

使用Python实现K近邻算法

K近邻&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种简单而有效的分类和回归算法&#xff0c;它通过比较新样本与训练样本的距离来进行预测。在本文中&#xff0c;我们将使用Python来实现一个基本的K近邻算法&#xff0c;并介绍其原理和实现过程。 什…

[dvwa] Command Injection

命令注入 0x01 low 没有过滤&#xff0c;直接利用 127.0.0.1 && ip a 函数 php_uname(mode) 动态地检查服务器的操作系统 ‘s’&#xff1a;操作系统名称 ‘n’&#xff1a;网络主机名 ‘r’&#xff1a;操作系统发行版本号 ‘v’&#xff1a;操作系统版本 ‘m’&…

书籍《笔记的方法》读后感

读完《笔记的方法》有几周的时间&#xff0c;书里有些记录的内容&#xff0c;觉得非常有价值的&#xff0c;自己的观点&#xff0c;当下读书&#xff0c;其实并没有那么高大尚&#xff0c;就是存粹陶冶下情操&#xff0c;读书还是有一定作用的&#xff0c;毕竟看书只能慢慢来&a…

淘宝API接口详解:如何高效利用API进行电商开发

淘宝API接口详解&#xff1a;如何高效利用API进行电商开发 请求示例&#xff0c;API接口接入Anzexi58 在电商行业蓬勃发展的今天&#xff0c;淘宝作为国内最大的电商平台之一&#xff0c;为商家和开发者提供了丰富的API接口。这些接口使得电商开发变得更加高效和便捷。本文将详…

【算法篇】三道题理解算法思想——认识BFS

BFS&#xff08;宽搜&#xff09; 宽度优先遍历和深度优先遍历组成了大家熟悉的搜索算法&#xff0c;这两种算法也是蓝桥杯之类竞赛题的常考思想&#xff0c;正巧马上蓝桥杯临近&#xff0c;博主也是刷了很多BFS相关的题型&#xff0c;在这篇文章中会从力扣上选取三道简单的宽搜…

一键无痕清理:高效删除Mac文件夹,释放宝贵存储空间

在当今重视隐私的时代&#xff0c;当转让或出借Mac电脑时&#xff0c;确保个人文件和敏感信息彻底清除至关重要。常规删除Mac上的文件和文件夹仅使数据看似消失&#xff0c;实际上它们仍驻留在硬盘上&#xff0c;存在被数据恢复软件找回的风险。为实现不可逆的删除效果&#xf…

【Linux】指令

1. 简单指令 whoami 显示当前登入账号名 ls /home 现在有的用户名 adduser 用户名 新加用户&#xff08;必须在root目录下&#xff09; passwd 用户名 给这个用户设置密码 userdel -r 用户名 删除这个用户 pwd 显示当前所处路径 stat 文件名 / 文件夹名 显示文件状…

c++ 数值计算<cmath>头文件介绍

<cmath> 是 C 标准库中的头文件&#xff0c;它提供了一系列数学函数和常量&#xff0c;用于执行各种数学计算。在 C 中&#xff0c;<cmath> 头文件中定义的函数和常量都位于 std 命名空间中。 以下是 <cmath> 头文件中常用的一些函数和常量&#xff1a; 常…