【Qt学习】06 Qt多线程之QThread用法

如何将线程/进程在一个/多个CPU核上运行 设置线程/进程和CPU亲缘性 阅读详情

多线程的优势

1、合理安排负载。对于图形界面程序尤其重要,当一个操作耗时很长,整个程序都会等待这个操作,程序就不能及时响应键盘鼠标等操作。多线程可以将耗时长的操作置于新的线程上,从而避免这个问题的发生。

2、提高系统效率。操作系统调度多线程任务运行到不同的CPU核心,从而避免系统资源浪费。

3、改善程序结构。一个既长又复杂的进程可以分解为多个线程,成为独立的运行部分,有利于代码的理解和维护。

 

环境

IDE:Qt creator 4.11.0

编译器:MinGW 5.3.0 32bit for C++

 

例子

1、OneThread.h文件

#ifndef ONETHREAD_H
#define ONETHREAD_H

#include <QThread>

class OneThread : public QThread
{
    Q_OBJECT
public:
    explicit OneThread(QObject *parent = nullptr);

protected:
    void run();

signals:
    void over();
};

#endif // ONETHREAD_H

 

2、OneThread.cpp文件

#include "OneThread.h"

OneThread::OneThread(QObject *parent) : QThread(parent)
{

}

void OneThread::run()
{
    sleep(5);
    emit over();
}

 

3、mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include <OneThread.h>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public:
    void pushButtonClicked();
    void dealTimeout();

private slots:
    void dealover();


private:
    Ui::MainWindow *ui;

    QTimer *m_Timer;
    OneThread *m_OneThread;
};
#endif // MAINWINDOW_H

 

4、mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    m_Timer = new QTimer(this);
    m_OneThread = new OneThread(this);

    connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::pushButtonClicked);
    connect(m_Timer, &QTimer::timeout, this, &MainWindow::dealTimeout);
    connect(m_OneThread, &OneThread::over, this, &MainWindow::dealover);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::pushButtonClicked()
{
    m_Timer->start(100);
    m_OneThread->start();
}

void MainWindow::dealTimeout()
{
    static int time = 0;
    ui->lcdNumber->display(time);
    time ++;
}

void MainWindow::dealover()
{
    m_Timer->stop();
}

 

5、main.cpp文件

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

 

6、mainwindow.ui文件

 

7、效果。

 

 

8、代码下载

地址:https://download.youkuaiyun.com/download/sunriver2000/12555944

 

Windowns操作系统:进程线程(Qt) 进程与线程 阅读详情

相关推荐

如何用QT实现获取电脑CPU核心数、显卡型号和内存大小等硬件信息的功能?

如何用QT实现获取电脑CPU核心数、显卡型号和内存大小等硬件信息的功能?

希望我的博客,能帮上你解决学习中工作中所遇到的问题 2174

线程绑定固定cpu核心运行

将线程与cpu核心绑定: SetProcessAffinityMask(GetCurrentProcess(),1); //线程绑定cpu核心 使用上面代码,可将当前的线程与cpu的某个核心绑定。 其中第二个参数为使用的cpu核心位置,其中cpu的核心数读取可参考链接:https://blog.youkuaiyun.com/weixin_42887343/article/details/119932661 ...

weixin_42887343的博客 2635

Qt多线程必知必会 : QThread、QFuture、QRunnable、QThreadPool

Qt多线程的N种实现方法

Mr.Sugarcane 1135

如何设置进程(线程)在指定的CPU上运行

实现方法 进程与指定cpu绑定:SetProcessAffinityMask(GetCurrentProcess(), dwMask); 线程与指定cpu绑定:SetThreadAffinityMask(GetCurrentThread(),dwMask); dwMask为CPU序号的或运算值:1(0001)代表只运行在CPU1,2(0010)代表只运行在CPU2,3(0011)代表

做一个优雅的程序员 1万+

【QT开发教程】Qt多线程编程:提高应用性能

在现代应用程序中,响应速度和性能是用户体验的关键因素。特别是在处理复杂计算或长时间运行的任务时,单线程应用程序可能会导致界面卡顿或无响应。为了提高应用性能,Qt提供了强大的多线程支持。本文将介绍如何在Qt中进行多线程编程,以提高应用的性能和响应速度。

科技改变人类,技术成就未来 1065

【QT开发教程】QT高并发多线程编程最佳实践:综述

高并发编程是指在同一时间处理多个任务的能力,通常用于提升应用程序的性能和响应速度。Qt提供了一系列强大的工具和类来实现高并发编程,包括多线程、异步编程和任务调度。本文将介绍Qt中的高并发编程技术,帮助开发者更好地利用Qt进行高效的并发编程。

科技改变人类,技术成就未来 1280

Qt 线程基础(QThread、QtConcurrent等)

昨晚看Qt的Manual,突然发现下一个版本的Qt中(Qt4.7.4、Qt4.8等)增加了一个特赞的介绍多线程的文章 :Thread Basics注意:该链接以后会失效,但是 到时候你直接看Qt自带Manual就行了本文不是严格的翻译 dbzhang800 2011.06.18使用线程基本上有种使用线程的场合:通过利用处理器的

1+1=10 7万+

电赛控制-----经验分享

1.赛前准备 先简单介绍一下电赛。电赛是两年一届,单数年是大电赛,全称是全国大学生电子设计大赛,之前由瑞萨电子赞助,所以之前也叫瑞萨杯,从19年开始赞助方变成了TI公司,偶数年是小电赛,全称是“TI杯”模电邀请赛,(这里不得不提TI公司的实力是愈来愈大了),一般来说小电赛的含金量会略低于大电赛,而且对与想拿国奖的同学来说还是要参加大电赛,因为小电赛一般每个学校会限制只有两个队伍进国赛,而大电赛是没有这个限制的,而且我们学校电赛保研的话,大电赛只要求国二,而小电赛只有国一才可以保,这样难度就增加了很多。..

qq_35656655的博客 1万+

Qt学习day06 QT多线程(QThread) 线程同步 网络编程基础

一 QT多线程(QThread) 1 创建线程 1)方法一:QObject::moveToThread class Worker : public QObject { Q_OBJECT public slots: //将来想在子线程中执行的函数 void doWork(…) { /耗时或阻塞的操作/ } }; class Controller : public QObject { Q_OBJECT...

weixin_43789711的博客 1068

代码实现ROS2bag录制数据和回放数据(C++)

ROS2的ROS2bag功能可以将指定Topic中的数据以.db3的格式(不同于ROS)保存到本地文件中。读取文件数据可以实现数据回放。

m0_57124501的博客 3256

深入浅出:.sh文件在Linux系统中的实战应用与技巧

本文深入浅出地介绍了.sh文件在Linux系统中的实战应用与技巧。从基础概念入手,详细讲解了Bash脚本的运行方法、权限管理,并通过编写自动化备份脚本等实例,展示了如何利用Shell脚本提升工作效率。文章还涵盖了脚本调试、错误处理以及函数、参数解析等进阶技巧,帮助读者从入门到精通,掌握这一强大的自动化工具。

weixin_29243279的博客 350

Qt----多线程

文章目录多线程一、继承QThread的线程1. 应用实例2. 程序运行效果二、继承QObject的线程1. 应用实例2. 程序运行效果 多线程 我们写的一个应用程序,应用程序跑起来后一般情况下只有一个线程,但是可能也有特殊情况。比如我们前面章节写的例程都跑起来后只有一个线程,就是程序的主线程。线程内的操作都是顺序执行的。恩,顺序执行?试着想一下,我们的程序顺序执行,假设我们的用户界面点击有某个操作是比较耗时的。您会发现界面点击完了,点击界面对应的操作还没有完成,所以就会冻结界面,不能响应,直到操作完成后,才

lengyuefeng212的博客 1万+

SAGA GIS英文版进行地形分析,计算常用的地形因子等

SAGA GIS中文版是一款专业的自动化地球科学分析系统软件。SAGA GIS最新版界面简洁,操作简便,用户使用时输入要分割的影像,选择要计算特征的影像或者波段,设置越大,得到的斑块越大;反之,则越小,点击Okay,得到分割影像图。SAGA GIS中文版主要通过选择适合你影像的格式,加载影像。 SAGA GIS全称是System for Automated Geoscientific Analyses,是一种用于编辑空间数据的地理信息系统(GIS)计算机程序,它是免费的开源软件,SAGA GIS旨在为科学家

qq_35794085的博客 5645

06-多线程(qt)

Tips:一个进程可能包含多个线程;进程结束,其包含的线程全部结束;线程结束,进程不一定结束。引入多线程的原因:应用程序在某些情况下需要处理比较复杂的逻辑,如果只有一个线程去处理,会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行逻辑运算,提高用户体验,提升程序的执行效率。Qt中使用多线程的注意点Qt提供的线程类,QThread,通过这个类可以创建子线程Qt提供了两种创建子线程的方式。信号槽静态函数任务处理函数。

FourJin的博客 701

Bellhop水声信道模型的仿真

Bellhop是一种基于射线追踪的水声信道模型,广泛用于预测水下环境中的声压场。它通过模拟声波在水中的传播路径,计算声场分布,适用于复杂的水下通信场景。

yt94832的博客 1315

【计算机视觉 | MMDetection】关于mmdetection如何计算参数量、计算量和速度FPS

【计算机视觉 | MMDetection】关于mmdetection如何计算参数量、计算量和速度FPS

wzk4869的博客 3022

Qt 线程基础(QThread、QtConcurrent、QThreadPool等)

Qt 线程基础(QThread、QtConcurrent、QThreadPool等)   2012-06-25 11:42:56|  分类: Qt|字号 订阅 使用线程 基本上有种使用线程的场合: 通过利用处理器的多个核使处理速度更快。为保持GUI线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线程。 何时使用其他技术替代线程

myths_0的专栏 1万+

57、振荡扫描仪的挠性枢轴:原理、设计与材料选择

本文深入探讨了振荡扫描仪中挠性枢轴的工作原理、设计方法与材料选择。挠性枢轴因其无润滑、高精度、低周期性误差和潜在无限寿命等优势,广泛应用于光学、太空、医学和半导体等领域。文章分析了其在小角度下的优异性能与无法连续旋转等局限性,提供了关键设计公式,并对比了多种挠性材料的性能指标。同时,结合不同应用场景提出设计优化策略,并展望了微型化、智能化和高性能材料等未来发展趋势,为工程实践提供了系统的设计流程与选型建议。

numpy6sculptor的博客 95

如何正确的使用QThread?(QThread入门)

2013.8.5 翻译自: http://blog.debao.me/2013/08/how-to-use-qthread-in-the-right-way-part-1/ 历史沿革 很久以前,子类化QThread并重新实现其run()函数是唯一推荐使用QThread的方法。 这非常直观,也好用。 但是,qt线程引入SLOTS和Qt事件循环后,这个方法就有问题了。详见20106.17的

大家好,我是Utanbo 9213

YOLOv11改进 ,YOLOv11改进主干网络为MobileNetV3,助力涨点

MobileNetV3通过结合硬件感知网络架构搜索(NAS)和NetAdapt算法,通过新颖的架构改进进一步提升了性能。本文开始探讨了自动化搜索算法与网络设计如何协同工作,以利用互补方法来提升整体技术水平。通过这一过程,创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源使用场景。这些模型随后被适配并应用于目标检测和语义分割任务。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1936

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Qt中的多线程QThread

一、Qt多线程基础 1、应用场景 多任务的情况下需要开多个线程来分别进行处理。 当一个UI界面有过于复杂耗时的计算要处理时,就不应该将这个耗时的计算和UI显示放在同一个线程下面。因为这样会导致UI卡死,或者程序不能响应的情况发生,此时应该重新开一个线程来处理这个复杂的计算。(如在计时器显示数字的线程中来处理一个复杂耗时的循环时,会导致整个UI停止响应,代码示例如下) #include "Pr06_QThread.h" Pr06_QThread::Pr06_QThread(QWidget *parent

Jeffxu_lib的博客 664

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

2022-06-19 Qt 多线程

Qt中线程的学习记录 Qt线程方式:示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。都有类似的功能集Qt提供线程池基本经验法则在多线程环境中,线程安全的函数可以实现数据共享,需不需要单独考虑数据同步可重入函数支持多个线程同时结其进行调用,需无需考虑外部数据同步 所有线程安全的函数都是可重入的,但反之不一定成立.继承QTread 和movetothread这两种线程的方式,太常见了,网络上资料也多的很,这里就不详细描述,看官方文档或者网络上一查即可...

ihmhm12345的博客 899

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

学习笔记之------------QThread使用方法。

<br />此博文转自:http://hi.baidu.com/cyclone/blog/item/5fac3bc7ab1b90d1d10060f2.html<br />很好,特此收藏。学习。共勉。<br /> <br /> <br /> 起源<br /><br />昨天不小心看到Qt开发人员( Bradley T. Hughes)Blog中的一片文章 you are-doing-it-wrong 。 结果看得头昏脑胀:好歹也自学了近1年的Qt,也一直很小心、很认真地阅读Qt和manual和例子等资料,却被

念茜的博客 7732

qt线程启动后等待返回_Qt 线程基础(QThread、QtConcurrent等)

昨晚看Qt的Manual,突然发现下一个版本的Qt中(Qt4.7.4、Qt4.8等)增加了一个特赞的介绍多线程的文章 :注意:该链接以后会失效,但是 到时候你直接看Qt自带Manual就行了本文不是严格的翻译 dbzhang800 2011.06.18使用线程基本上有种使用线程的场合:通过利用处理器的多个核使处理速度更快。为保持GUI线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线...

weixin_39896256的博客 652

用对事物的认知来理解来QThread

很久没来优快云了,也从未发过博客,最近为了解决Qt多线程网络编程中的一些问题,需要在网上搜索一些资料,但无意之中发现有关QThread使用方面的问题,个人觉得还是很有必要说说,或许对大家理解Qt有些帮助. 通过几年对Qt的使用和研究,个人觉得Qt这套框架面向对象的层次还是比较高的,尽管它的类和接口不像C#和Java那样丰富,但它的设计思想毫不逊色,QThread算是它的一个亮点,如果你真正理解

hutophill的博客 293
上一篇: 【Qt学习】03 非继承QObject类 connect 用法
下一篇: 【Qt】arm-none-eabi-gdb-py.exe由于找不到python27.dll 无法继续执行代码
sunriver2000
博客等级 码龄21年 453粉丝 295原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值