Qt中多线程的使用(一)

VIPQt中多线程的使用(一)
我们要实现的是读取大文件qtgui.index的内容加入文本框中。 很容易想到的方法: QFile* file = new QFile("E:\qtgui.index"); file->open(QIODevice::ReadOnly); QTextStream *stream = new QTextStream(file); while(!st...
开通可读全文 ·1.7w 人阅读
最低0.47元/天 解锁文章

我们要实现的是读取大文件qtgui.index的内容加入文本框中。
预览
很容易想到的方法:

    QFile* file = new QFile("E:\qtgui.index");
    file->open(QIODevice::ReadOnly);
    QTextStream *stream = new QTextStream(file);

    while(!stream->atEnd())
    {
        QString line = stream->readLine();
        ui->textEdit->append(line);
    }

结果运行后发现程序失去响应。因为读取大文件要很长时间,事件循环一直等待函数返回,这样导致阻塞事件循环。结果,GUI线程所有的绘制和交互都被阻塞在事件队列中,无法执行重绘等事件,整个程序就失去响应了。

解决阻塞一般有两种方法:

手动强制事件循环

在任务中不断调用QCoreApplication::processEvents()手动强制事件循环,它会在处理完队列中所有事件后返回。但是如果两次函数调用的间隔时间不够短,用户仍能明显感觉到程序卡顿。所以在while循环最后加一行QApplication::processEvents();即可。

多线程处理。

Qt提供了三种方式:QThread、QRunnable / QThreadPool、QtConcurrent。其中最常用的是 QThread。

对于本例,使用QThread又有三种方法:信号与槽实现线程间通信、元对象系统实现线程间通信、分离线程与任务。前两种也是跨线程调用函数的方法。

使用QThread

信号与槽实现线程间通信

这是线程间通信比较常用的方法。代码:

class ReadThread : public QThread
{
    Q_OBJECT
public:
    ReadThread(QObject* obj);
signals:
    void toLine(QString line);
protected:
    void run() Q_DECL_OVERRIDE;
private:
    QFile* file;
    QObject* m_obj;
};

ReadThread::ReadThread(QObject* obj):
    m_obj(obj)
{
    file = new QFi
VIP Qt线程基础使用指南 qt线程基础使用手册 开通可读全文·2.4k 阅读·0 点赞·2 收藏 阅读全文

相关推荐

Qt多个线程同时读取文件

Qt实现两个线程同时访问图片

qq_41588862的博客 2340

浅谈C++中的多线程(三):Qt中的多线程应用

本篇文章围绕以下几个问题展开: 何为进程?何为线程?两者有何区别? 何为并发?C++中如何解决并发问题?C++中多线程的语言实现? 同步互斥原理以及多进程和多线程中实现同步互斥的两种方法 Qt中的多线程应用 前三个问题已经在之前两篇文章中讲解,本篇文章作为结尾篇来讲解最后一个问题:Qt中的多线程应用。 四.Qt中的多线程应用 1.引入 程序由单线程到多线程,就像以前是一个人干...

Eason_Grace的博客 8192

Qt多线程使用方法总结

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

1281

例题讲解拉格朗日乘子法、线性可分支持向量机(SVM)的推导

支持向量机(Support Vector Machine, SVM)的简单推导及例题

zzzssszzzzsz的博客 5663

QMI8658姿态传感器实战:从校准到自检的完整避坑指南

本文详细解析了QMI8658姿态传感器的校准与自检流程,提供了从硬件环境搭建到高级功能开发的完整避坑指南。通过真实案例揭示电源设计、接口优化、温度补偿等关键细节,帮助开发者提升传感器精度和可靠性,适用于工业级应用场景。

weixin_29184075的博客 430

Linux故障排查和性能优化面试题及参考答案

在 Linux 系统中,负载(Load Average)是衡量系统繁忙程度的一个重要指标,它表示系统在特定时间间隔内运行队列中的平均进程数。负载值反映了系统当前的工作压力,主要包括 CPU 等待运行的进程数量和处于不可中断睡眠状态(通常是等待 I/O 操作完成)的进程数量。负载平均值通常有三个数值,分别代表过去 1 分钟、5 分钟和 15 分钟内的系统平均负载。例如,在使用uptime命令或查看文件时,会看到类似这样的输出,这三个数值依次表示过去 1 分钟、5 分钟和 15 分钟的负载平均值。

大模型大数据攻城狮的专栏 1058

【置顶】ARMv8/ARMv9架构入门到精通-[目录]

周贺贺,baron,代码改变世界,coding_the_world,Arm精选,arm_2023,安全启动,加密启动 optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、内存管理、页表,Non-cacheable,Cacheable, non-shareable,inner-shareable,outer-shareable, optee、ATF、TF-A、Trustzone、optee3.14、MMU、V

baron-周贺贺-代码改变世界ctw 2万+

【数据集】CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

WW、forever的博客 381

【AI】获取各类AI大模型api-key的快速教程(OpenAI、Gemini、Claude、DeepSeek)

【AI】获取各类AI大模型api-key的快速教程(OpenAI、Gemini、Claude、DeepSeek)

funfan的博客 2350

【目标检测】基于yolov5的道路坑洼检测(附代码和数据集)

基于yolov5的道路坑洼检测(附代码和数据集)

学无止境、积少成多、厚积薄发 4595

客客威客系统KPPW 2.7 UTF8

客客威客系统KPPW是武汉客客团队自主研发的开源系统项目,主要应用于威客模式的在线服务交易平台搭建。KPPW网站程序使用PHP+MYSQL开发,程序框架采用面向对象MVC设计模式,WEB前端采用最流行的HTML5+CSS3开发框架Bootstrap支持响应式网页设计。客客威客系统KPPW 2.7 UTF8 更新日志:2016-02-02修复1.修复关闭店铺后再次点击出现的样式错误2.修复威客个人中心无法关闭店铺的BUG3.修复雇佣任务被威客拒绝后收不到站内信的BUG4.修复案例不显示议价和福袋任务的BUG5.修复发布服务时购买增值服务不现实金额的BUG6.修复议价任务没托管赏金却有退款的BUG7.修复议价任务的流程BUG8.修复议价任务托管赏金有退款时无法收到退款的BUG9.修复在个人中心编辑商品时无法编辑表情的BUG10.修复手机端我是威客和我是雇主无法点击的BUG增加1.增加雇主在个人中心查看订单的按钮2.增加案例筛选功能3.优化支付功能4.增加一套全新的模板5.全新改版个人中心6.强化后台对交稿的限制7.优化店铺的样式

微信小程序商城源码.zip

小程序商城源码,包含小程序,后台管理系统,服务后端,小程序包含商品浏览,商品详情,分类浏览,微信授权登录,微信支付等功能,管理后台可进行商品及订单的管理,包含上架、下架、公告,发货等功能

AVProVideo-Ultra Edition 2.7.3.zip

AvproVideo,官网中有免费的,免费的带了水印。不介意水印去下载,挺好使的。收费的在Unity商店中能找到:(这里我从淘宝上花“重金”买了)以前都是用的AvPro免费版的,我是用版本是Unity2022.3.11f1

玻璃制品 GB 4806.5-2016 食品安全国家标准

GB 4806.5-2016 食品安全国家标准 玻璃制品提供国家标准《GB 4806.5-2016 食品安全国家标准 玻璃制品》电子版的,同时提供更多食品安全相关的资料的查询与下载。

上一篇: QSpacerItem和Qt布局
下一篇: Qt中多线程的使用(二)
SilentAssassin
博客等级 码龄12年 147粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值