Qt多线程的使用

Qt常用的多线程使用方式 QMetaObject::invokeMethod,参数可以指定是跨线程调用还是直接在同线程中调用。 阅读详情

Qt多线程的基本使用方法

线程的常用成员函数
在这里插入图片描述
退出线程,停止底层的事件循环,函数为

void QThread::exit(int returncode =0);

调用线程退出函数之后,线程不会马上退出因为当前任务有可能还没有完成,等待任务完成,然后退出线程,一般况下会在 exit()后边调用这个函数。

bool QThread::wait(unsigned long time = ULONG MAX);

启动子线程,start函数括号中中设置的是优先级。

[slot] void QThread::start(Priority priority = InheritPriority);

/线程休眠函数

[static] void Qrhread::msleep(unsigned long msecs);//单位毫秒
[static] void QThread::sleep(unsigned long secs);//单位秒
[static] void QThread::usleep(unsigned long usecs);//微秒

线程要处理什么任务,需要写到run()中

[virtual protected] void QThread::run();

使用方式

需要创建一个线程类的子类,让其继承QT中的线程类 QThread

class MyThread:public QThread
{
    ......
}

重写父类的 run() 方法,在该函数内部编写子线程要处理的具体的业务流程

class MyThread:public QThread
{
    ......
 protected:
    void run()
    {
        ........
    }
}

在主线程中创建子线程对象,new 一个就可以了

MyThread * subThread = new MyThread;

启动子线程, 调用 start() 方法

subThread->start();

实际运用

创建一个新的类继承自 QThread。

class WorkerThread : public QThread//这里是头文件
   {
   public:
       WorkerThread();
       ~WorkerThread();
   protected:
       void run() override;
   };

实现 run 方法,在这个方法中编写子线程要执行的任务。

WorkerThread::WorkerThread() {}
WorkerThread::~WorkerThread() {}
 void WorkerThread::run()
   {
       // 子线程执行的任务
       qDebug() << "Running in worker thread.";
       // 可以进行耗时操作,例如文件读取、复杂计算等
   }

在主线程中创建并启动子线程。

include <WorkerThread.h>//头文件中有了就不用在cpp文件引入
 int main(int argc, char *argv[])
   {
       QApplication app(argc, argv);

       WorkerThread *thread = new WorkerThread();
       thread->start();//线程开始运行

       return app.exec();
   }

当然实际运用中,会有数据的传输,使用信号与槽进行子线程与主线程的数据交互,这个信号与槽的知识,教程较多,这里就不多赘述。

Qt多线程使用方法总结 Qt有两种开启多线程的方法,一种是继承QThread,然后重写run函数,另一种是把一个继承于QObject的类调用movetothread方法转移到一个Thread中。这两种方法都经常使用,这里记录一下需要注意的事项。 一,继承QThread得到MyThread MyThread只有run函数是运行在子线程中的,其它所有的函数运行在创建MyThread时的线程中。 通俗来说就是如果你是在主... 阅读详情

相关推荐

Qt中多线程的使用(一)

我们要实现的是读取大文件qtgui.index的内容加入文本框中。 很容易想到的方法: QFile* file = new QFile("E:\qtgui.index"); file-&gt;open(QIODevice::ReadOnly); QTextStream *stream = new QTextStream(file); while(!st...

yao5hed的专栏 1万+

C++ QT QThread基操

在quit函数中,线程会在执行完当前任务后退出。然后,我们使用QTimer::singleShot函数在5秒、10秒和15秒后分别调用MyThread::pause、MyThread::resume和QThread::quit函数,从而暂停、恢复和停止线程的执行。需要注意的是,在QThread的子类中使用sleep函数是不推荐的,应该使用QThread::msleep函数代替。3. 暂停线程:在线程任务中使用一个标志变量控制线程的执行,当标志变量为false时,线程任务会进入等待状态,从而实现线程的暂停。

Hello___Sunshine的专栏 2177

多线程编程一直是实现高性能、高并发程序的重要手段。Qt作为一种流行的跨平台应用程序开发框架,其提供了非常强大的多线程支持。本文就介绍一下Qt中如何使用线程。

当线程启动时,我们通过connect()函数将线程启动信号连接到了Lambda表达式中,在该Lambda表达式中编写了线程的业务逻辑。为了启动一个Qt线程,首先需要先创建一个QThread对象,然后将要在线程中执行的内容放到QObject对象中,并将该对象移动到新创建的线程中。总之,在Qt中使用多线程非常方便,开发者只需要继承QThread类并重载run()函数,或者使用其他线程相关的类,就能够轻松地实现高效、高并发的程序。在run()函数中编写线程的业务逻辑,线程启动后就会执行该函数中的代码。

TechCraze的博客 303

【Qt】Qt中多线程的使用

Qt中多线程的使用

liyiran_的博客 2106

QT多线程使用总结

每个线程可以有它的事件循环,初始线程开始它的事件循环需使用QCoreApplication::exec(),别的线程开始它的事件循环需要用QThread::exec().像QCoreApplication一样,QThreadr提供了exit(int)函数,一个quit() slot。需要注意的是,这些类被设计成在一个单线程中创建与使用,因此,在一个线程中创建一个对象,而在另外的线程中调用它的函数,这样的行为不能保证工作良好。它们是完全可重入的。同样的道理,调用生存在不同的线程中的对象的函数也是不是安全的。

程序猿老樊的博客 1702

QT多线程的使用

QT中的线程用于实现多任务并发执行,提高程序的执行效率和响应速度。在QT中,线程是进行运算调度的最小单位,它们包含在进程之中并作为进程中的实际运作单位。使用线程的主要目的是让程序能够同时执行多个任务。提高性能和响应速度:通过将耗时的操作放在单独的线程中执行,可以避免UI冻结,提高应用程序的响应速度。实现多任务处理:一个进程中可以并发运行多个线程,每条线程并行执行不同的任务,有效地利用了计算机多核处理器的能力。简化复杂操作。

qq_48597462的博客 3351

QT-多线程、线程池的使用

在进行桌面应用程序开发的时候, 假设应用程序在某些情况下需要处理比较复杂的逻辑,如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行逻辑运算,多个线程各司其职,不仅可以提高用户体验,还可以提升程序的执行效率。

R_conqueror的博客 1737

掌握QT多线程编程:使用moveToThread方法

在现代软件开发中,多线程编程是一种提升应用程序性能和响应性的关键技术。通过并发执行多个任务,多线程能够在执行耗时操作时保持用户界面的响应,从而改善用户体验。QT框架中的多线程编程为开发者提供了强大的工具来管理并发执行和线程间的通信。QT框架本身是用C++编写的,它继承了C++强大的面向对象编程能力,并为多线程编程提供了丰富的类和接口。在QT中,多线程编程主要通过QThread类来实现,该类提供了线程的创建、启动、控制和管理等功能。

weixin_35755188的博客 1482

Qt下的多线程的使用

Qt中关于多线程的类为QThread,有三种使用方法:一种方法是通过一个类继承QThread类,同时重写Thread::run()函数;第二种是直接实例化一个QThread,之后将继承自QObject的对象,通过QOjbect::moveToThread()搬到之前实例化的QThread执行;最后一种是通过直接将一个函数搬到QThread中执行,有点类似于pthread_create()的方式。

Blunt_Du的博客 1735

混合示教长短时记忆网络的车辆轨迹预测研究

论文"混合示教长短时记忆网络的车辆轨迹预测研究"中数据处理及MTF-LSTM模型实现代码,模型在Pytorch框架下实现。

ColinFhz的博客 1447

vins-mono前端详解(2)——imu预积分

本篇文章详细讲解了vins-mono中imu预积分内容,包括复杂的公式推导。

weixin_44587828的博客 1194

Qt中多线程的使用

在进行桌面应用程序开发的时候, 假设应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行逻辑运算,多个线程各司其职,不仅可以提高用户体验还可以提升程序的执行效率。默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者窗口控件数据的更新子线程负责后台的业务逻辑处理,子线程中不能对窗口对象做任何操作,这些事情需要交给窗口线程处理。

houxian1103的博客 8323

基于ROS2 Humble与Livox Mid-360的双雷达点云融合实战解析

本文详细解析了基于ROS2 Humble与Livox Mid-360的双雷达点云融合实战方案。从环境搭建、驱动安装、双雷达配置、外参标定、时间同步到点云融合核心实现,全面介绍了技术要点与避坑指南,并提供了工程化部署与性能优化建议,助力开发者高效实现高精度点云合成应用。

ss78901的博客 1093

Qt多线程使用

Qt中实现多线程需要使用线程类QThread。主要接口:start() 开始线程虚函数:virtual void run() 线程的运行run函数。虚函数子类重新实现信号函数:finished() 线程运行结束会发出此信号优点:QThread提供了丰富的接口,允许开发者对线程的生命周期和行为进行细粒度的控制。可以方便地在主线程和工作线程之间共享数据,通过方法将对象移至特定线程。可以使用QObject的信号和槽机制实现线程安全地通信。对于需要精细控制线程的应用,QThread是一个很好的选择。

weixin_38834817的博客 1029

泛微OA与金蝶云星空深度集成实战:审批与表单双场景解析

本文深入解析泛微OA与金蝶云星空的深度集成实战,聚焦审批流程与表单对接两大核心场景。通过具体案例,详细阐述了如何实现业务数据与审批流程的自动联动,打破数据孤岛,提升企业运营效率与数据一致性,并分享了接口设计、安全策略及实战避坑指南。

4k5l6j7h8的博客 466

控制障碍函数(Control Barrier Function,CBF) 二、示例

使用一个经典简单的示例讲解CBF的推导

Lyajpunov的博客 6432

第六章 QT基础:7、Qt中多线程的使用

技术点说明QThreadQObject实现真正的工作线程架构将工作对象迁移到线程中信号槽机制主线程与子线程通信(线程安全)UI线程与逻辑分离不阻塞界面,提升用户体验线程安全UI更新使用信号更新界面,避免子线程直接操作控件。

qq_62848032的博客 1340

Apache DolphinScheduler 实现了对 OceanBase 的元数据库支持

Apache DolphinScheduler 是一款开源的分布式工作流任务调度系统,它提供了可视化的工作流设计和调度功能,支持大数据任务的自动化调度和监控。最近的更新中,Apache DolphinScheduler 引入了对 OceanBase 数据库的元数据库支持,这为用户在大数据环境中管理和调度任务提供了更多选择。用户可以通过 DolphinScheduler 提供的可视化界面进行工作流的设计和调度,也可以通过 DolphinScheduler 提供的 API 进行任务的编程调度。

VavzNvml的博客 495

QT中多线程的使用

桌面开发中,主线程负责窗口类,其他线程负责应用程序处理,减少窗口卡顿的现象发生。多线程机制正好满足这个需求,提高用户体验和代码执行效率。

梅山 1662

uniapp - 超详细实现播放 svg / svga 格式动画组件插件,用于直播间赠送礼物特效动画或项目动画特效较多的应用(新手小白保姆级教程,提供插件+详细运行示例+使用文档+注意事项+格式说明)

uniappsvga,uniapp播放svga动画,uniapp中使用svga动画详细教程,uniapp播放svga的插件,uniapp有没有调用svga格式动画的组件插件,uinappH5App小程序全端兼容的svga播放器免费好用插件,uniapp好用的svga格式动画插件,在uniapp中使用SVGAPlayer播放svga动画,uniapp中使用svga动画,编译到apph5,uniapp运行svg动画,uniapp怎么使用svga文件格式,uniapp播放svg格式的动画教程,un

🏆 前端领域优质创作者 1万+

遇到一个诡异的WiFi网络问题:同一个办公室苹果电脑上不了网,其他电脑都可以

先来把问题掰开揉碎地看清楚:在一个普通的办公室WiFi网络中,所有设备——Windows电脑、安卓手机、甚至是那台老旧的Linux服务器——都能正常联网,唯独苹果电脑(可能是MacBook、iMac或者Mac mini)像被下了魔咒一样,连不上网。这种情况不仅让人抓狂,还透着一股神秘感。为什么偏偏是苹果电脑?难道WiFi路由器对苹果有“偏见”?这些症状都指向一个核心问题:苹果电脑与办公室WiFi之间,似乎存在某种“沟通障碍”。但这障碍到底出在哪里呢?是苹果电脑自己的问题,还是网络设置在“针对”它?

网络技术联盟站 842

Qt 多线程使用总结

这几天在研究如何使用Qt的多线程,想将串口操作放到线程中去执行,这样的话,就算是串口接收大量的数据,也不会导致界面出现假死的现象。 之前在使用串口的时候,一般都是采用异步(非阻塞)方式通信,也即是通过调用: connect(serial, &QSerialPort::readyRead, this, &SerialBoard::readData); //直接读取全部数据 void...

暖暖_的_纠结的博客 2645

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

QT - CPP 多线程使用

QT - CPP 多线程使用QT - CPP 多线程使用

weixin_36447711的博客 339

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

QT 多线程 使用信号和槽

QT多线程使用信号和槽时,参数用引用类型,失败;参数用指针,成功。

ninioq的专栏 562

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: Python基础学习笔记
下一篇: Visa连接设备错误处理总结
码龄5年的落魄程序员
博客等级 码龄8年 45粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值