【QT学习】14.线程学习

news2024/10/5 21:19:37

一。线程了解

        线程是计算机科学中的一个重要概念,它是操作系统能够进行运算调度的最小单位。线程是进程中的一个执行流,一个进程可以包含多个线程。与进程相比,线程更轻量级,可以更高效地利用计算机资源。

线程有以下几个特点:

  1. 并发执行:多个线程可以同时执行,提高了程序的执行效率。
  2. 共享内存:同一进程中的线程共享相同的内存空间,可以方便地进行数据共享和通信。
  3. 轻量级:线程的创建和销毁开销较小,切换线程的开销也较小。

线程可以用于实现并发编程,常见的应用场景包括:

  1. 提高程序的响应速度:将耗时的操作放在一个单独的线程中执行,可以避免阻塞主线程,提高用户体验。
  2. 并行计算:将任务分解成多个子任务,每个子任务由一个线程执行,可以加速计算过程。
  3. 处理IO密集型任务:在等待IO操作完成的过程中,可以切换到其他线程执行其他任务,提高系统的利用率。

二。实例:实现显示时间的同时,显示一个随机数据

1.方式一:使用两个定时器

结果:

        点击关闭,定时器t2关闭,点击开始,定时器t2开始。

1.创建属性

2.函数实现

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //随机数
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
    //t1监听
    connect(&t1,&QTimer::timeout,
            [=](){
        //获取当前时间
        QDateTime currentTime=QDateTime::currentDateTime();
        QString str=currentTime.toString("yyyy.MM.dd hh:mm:ss ddd");
        //显示当前文本
        ui->lineTime->setText(str);
    });
    //t2监听
    connect(&t2,&QTimer::timeout,[=](){
        //获得一个随机数
        QString str = QString("%1").arg(qrand()%100000000);
        //显示到行文本
        ui->lineRand->setText(str);
    });
    //定时器开始
    t1.start(1000);
    t2.start(100);
}

两个按钮的槽函数

2.线程方式二:使用两个线程(与方式三相比较)

结果:

        使用线程处理的日期,随机数如果想要做的话,需要去在创建一个线程类

1.线程类属性

线程信号isDone没有内容,就是一个信号标识符,在run函数使用emit发送信号即可。

1.wiget类的属性

注意:要创建关闭线程,因为进程关闭时,不会自动关闭线程,需要手动关闭

2.函数实现

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    pTimeThread=new timeThread(this);
    pTimeThread->start();
    //使用线程处理时间----
    connect(pTimeThread,&timeThread::isDone,[=](){
        //获取当前时间
        QDateTime currentTime = QDateTime::currentDateTime();
        QString str = currentTime.toString("yyyy.MM.dd hh:mm:ss ddd");
        //显示到行文本
        ui->lineTime->setText(str);
    });

    //在关掉窗口的时候结束线程----
    connect(this,&Widget::destroyed,this,&Widget::quitThread);
}
//关闭线程
void Widget::quitThread(){
    //t1.stop();
    pTimeThread->quit();//结束线程  但是不会回收线程的资源
    pTimeThread->wait();//回收线程资源
}

2.线程方式三:使用两个线程

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

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

相关文章

小酒馆点餐系统实现-C++项目详细过程

目录 项目介绍1、项目描述2、市场调研3、技术调研 项目设计1、概要设计2、详细设计① 数据管理模块:② 业务控制模块:③ 前端界面模块: 3、代码实现实现数据管理模块实现业务控制模块实现前端界面模块 项目介绍 1、项目描述 使用户可以通过…

外包干了3天,技术就明显退步了。。。。。

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

UE5 蓝图入门

基础节点创建: 常量: 按住 1 ,点击鼠标左键,创建常量 二维向量: 按住 2 ,点击鼠标左键,创建二维向量 三维向量: 按住 3 ,点击鼠标左键 按 c 键打出一个注释框 参考视…

[数据结构]———交换排序

目录 ​编辑 ​编辑 1.交换排序 第一个定义了一个名为Swap的函数 第二个三数取中 2.冒泡排序 代码解析 冒泡排序的特性总结: 3.快速排序 1. hoare版本 2. 挖坑法 代码解析 3. 前后指针版本 代码解析 1.交换排序 基本思想:所谓交换&#xff0…

maven插件:dockerfile-maven-plugin和docker-maven-plugin

Maven插件dockerfile-maven-plugin和docker-maven-plugin都是为Java开发人员提供了一种便捷的方式,通过Maven构建流程来自动化创建、管理和推送Docker镜像。虽然它们有着相似的目标,即集成Docker与Maven项目,但这两个插件在实现细节、功能侧重…

windows驱动开发-WDF对象

WDF封装了大量的WDF对象,不过,和应用层不一样,不用去尝试从WDF框架对象类上派生和改写原有的WDF类,本意WDF就是希望我们使用这些对象和类,而不是创造新的奇怪的类。 每个WDF对象都代表着对一项驱动需要使用的子功能的…

骑缝电子章怎么盖?

盖骑缝电子章通常涉及几个基本步骤,这里提供一个通用的流程,适用于大多数电子文档处理软件,尤其是那些支持电子签名和印章功能的软件,比如Adobe Acrobat Pro DC、e-章宝(易友EU3000智能盖章软件)等。请注意,具体操作可…

附录3-小程序常用事件

目录 1 点击事件 tap 2 文本框输入事件 input 3 状态改变事件 change 4 下拉刷新事件 onPullDownRefresh() 5 上拉触底事件 onReachBottom() 1 点击事件 tap 2 文本框输入事件 input 可以使用 e.detail.value 打印出当前文本框的值 我现在在文本框中依次输入12345&…

C语言 | Leetcode C语言题解之第62题不同路径

题目&#xff1a; 题解&#xff1a; int uniquePaths(int m, int n) {long long ans 1;for (int x n, y 1; y < m; x, y) {ans ans * x / y;}return ans; }

【linuxC语言】exec函数族

文章目录 前言一、exec函数族二、示例代码2.1 代码12.2 代码22.3 代码3 总结 前言 在Linux环境下&#xff0c;C语言提供了一组强大的函数族&#xff0c;即exec函数族&#xff0c;用于执行其他程序。这些函数允许程序在运行时加载并执行不同的程序&#xff0c;从而实现了程序之…

spring boot 自定义starter示例

springboot 约定规范 Starter项目的命名规范 建议自定义的starter 以 xxx-spring-boot-starter 命名&#xff0c;官方的Starter一般都是以spring-boot-starter-为前缀。这样做的目的是为了避免与官方或其他第三方提供的Starter产生冲突或混淆。 Starter项目的结构规范(重要) …

详解SDRAM基本原理以及FPGA实现读写控制

文章目录 一、SDRAM简介二、SDRAM存取结构以及原理2.1 BANK以及存储单元结构2.2 功能框图2.3 SDRAM速度等级以及容量计算 三、SDRAM操作命令3.1 禁止命令&#xff1a; 4b1xxx3.2 空操作命令&#xff1a;4b01113.3 激活命令&#xff1a;4b00113.4 读命令&#xff1a;4b01013.5 写…

spring的常用注解

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Spring⛺️稳中求进&#xff0c;晒太阳 Spring框架注解&#xff1a; 给容器中注入组件 &#xff08;1&#xff09;包扫描组件标注注解 Component&#xff1a; 用于标识一个类作为组件&am…

【数据结构(十)】Map和Set

❣博主主页: 33的博客❣ ▶️文章专栏分类:数据结构◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构知识 目录 1.前言2.搜索树2.1 概念2.2实现二叉搜索树 2.4性能分析3.搜索3.Map3.1Map说明3.2 M…

【UnityRPG游戏制作】Unity_RPG项目之场景环境搭建和解析

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

图论之最短路算法模板总结

来个大致的分类&#xff1a; 朴素的迪杰斯特拉&#xff1a; 实现&#xff1a; 我们让s表示当前已经确定的最短距离的点&#xff0c;我们找到一个不在s中的距离最近的点t&#xff0c;并用t来更新其他的点。 下面是AC代码&#xff1a; #include<bits/stdc.h> using nam…

C++之const用法小结

在C中&#xff0c;const关键字具有多种用法&#xff0c;主要用于声明常量&#xff0c;确保某些变量的值在程序运行期间不会被修改。以下是const在C中的一些常见用法&#xff1a; 1.声明常量&#xff1a; 使用const声明的变量是常量&#xff0c;其值在初始化后不能再被修改。 …

关于海康相机和镜头参数的记录

对比MV-CS020-10UC和大家用的最多的MV-CS016-10UC 其实前者适合雷达站使用&#xff0c;后者适合自瞄使用 一&#xff1a;MV-CS020-10UC的参数 二&#xff1a;对比 三&#xff1a;海康镜头选型工具

mysql从入门到起飞+面试基础题

mysql基础 MySQL基础 企业面试题1 代码 select m.id,m.num from ( select t.id as id,count(1) num from ( select ra.requester_id as id from RequestAccepted raunion all select ra.accepter_id as id from RequestAccepted ra ) t group by t.id ) m group by id ord…

C++学习第十八课:STL中的`string`类深度解析

C学习第十八课&#xff1a;STL中的string类深度解析 在C标准模板库&#xff08;STL&#xff09;中&#xff0c;std::string是一个提供了大量功能和操作的类&#xff0c;用于处理和存储字符串数据。std::string不仅包含了传统的C风格字符串&#xff08;如char*&#xff09;所提…