Qt 多线程的简单演示

任务:单击“”开始“”按钮将启动数个工作线程,线程由checkBox 来决定线程的启用或者关闭,各个线程循环打印数字,数字每秒累加1;单击“停止”按钮将终止所有线程。


关于Qt中线程的理解:

Qt中的QThread类提供了平台无关的线程。一个QThread代表了一个在应用程序中可以独立控制的线程,它与进程中的其他线程分享数据,而且是独立执行的。

多线程编程可以有效解决在不冻结一个应用程序的用户界面情况下执行一个耗时的操作问题。

相对于一般的程序都是从main()函数开始执行,QThread从run()函数开始执行。

QThread也提供了一个预平台五关的睡眠函数。

实现过程:

单独构造一个WorkThread 类

#ifndef WORKTHREAD_H
#define WORKTHREAD_H
#include<QString>
#include<QThread>
#include<QObject>class Workthread:public QThread
{Q_OBJECT
public:Workthread();QString str;protected:void run();
signals:void mysignal(int);};#endif // WORKTHREAD_H

#include "workthread.h"
#include<QDebug>Workthread::Workthread()
{}void Workthread::run()
{while(true){for(int n = 0;n<1000;n++){str = QString::number(n);sleep(1);emit(mysignal(n));qDebug()<<str;}}
}

在workThread类中,定义了run() 来实现定时器累加。

接着在mianwindow.cpp 的构造函数中添加如下代码,这里将创建多个线程的对象。关联按钮来控制线程的开启和终止。

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);setWindowTitle("线程");for(int i = 0;i<MAXSIZE;i++){workThread[i] = new Workthread();connect(workThread[i],SIGNAL(mysignal(int)),this,SLOT(ShowMsg(int)));}for(int i = 0;i<5;i++){flag_thread[i] = false;}connect(ui->pushButton_start,SIGNAL(clicked()),this, SLOT(slotStart()));connect(ui->pushButton_stop,SIGNAL(clicked()),this, SLOT(slotStop()));connect(ui->pushButton_exit,SIGNAL(clicked()),this, SLOT(close()));
}

接着:在信号槽函数中实现 线程的开启和终止


void MainWindow::slotStart()
{for(int i = 0;i<5;i++){if(flag_thread[i]){workThread[i]->start();}}ui->pushButton_start->setEnabled(false);ui->pushButton_stop->setEnabled(true);
}void MainWindow::slotStop()
{for(int i = 0;i<5;i++){if(flag_thread[i]){workThread[i]->terminate();workThread[i]->wait();}}ui->pushButton_start->setEnabled(true);ui->pushButton_stop->setEnabled(false);
}

我们用一个editText 部件来显示线程处理中的数值,ShowMsg()函数来接收线程传递过来的信号mysignal(int)

这里,我们关联

     connect(workThread[i],SIGNAL(mysignal(int)),this,SLOT(ShowMsg(int)));
void MainWindow::ShowMsg(int i )
{QString str  =  QString::number(i);ui->textEdit->append(str);
}

这样就可以实现文本框的显示了。

最后,checkBox 部件的实现,我们让该部件来响应线程的开启和关闭、

void MainWindow::on_checkBox_1_clicked(bool checked)
{if(checked){flag_thread[0] = true;workThread[0]->start();}else{flag_thread[0] = false;workThread[0]->terminate();workThread[0]->wait();}
}

这样,关于Qt多线程的并发处理的简单例子就实现了,这里并没有涉及线程间控制的相关内容。

资源链接:
https://download.csdn.net/download/qq_21291397/12354483

Qt 多线程的简单演示相关推荐

  1. Qt多线程-QThreadPool线程池与QRunnable

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QThreadPool线程池与QRunnable     本文地址:http:// ...

  2. WIFi 开关控制实现-ESP8266 物联网 android studio arduino QT多线程服务器

    WIFi 开关控制实现-ESP8266 物联网 android studio arduino QT多线程服务器 WIFI局域网/外网 开关控制实现-物联网ESP8266 android QT 简介:本 ...

  3. (二)Qt多线程实现海康工业相机图像实时采集

    系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 文章目录 系列文章目录 ...

  4. Qt多线程编程(一)入门篇

    目录 一.多线程是什么 二.为什么要使用多线程进行开发 1.提高处理效率 2.软件运行更加流畅 3.根据优先级依次处理 三.Qt多线程入门 QThread类,类成员及类成员函数介绍 公有变量 公有函数 ...

  5. Qt 多线程基础及线程使用方式

    文章目录 Qt 多线程操作 2.线程类QThread 3.多线程使用:方式一 4.多线程使用:方式二 5.Qt 线程池的使用 Qt 多线程操作 应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一 ...

  6. QT 多线程创建方法及应用实例

    QT 多线程创建方法及应用实例 方法一: (1)创建一个QT应用 (2)创建线程类,继承QThread simplethreadone.h #ifndef SIMPLETHREADONE_H #def ...

  7. QT 多线程的实现方法以及GUI线程与其他线程间的通信

    GUI线程 Qt应用程序exec后就会生成一个线程,这个线程就是主线程,在GUI程序中也称为GUI线程.主线程也是唯一允许创建QApplication或QCoreAppliation对象,比并且可以对 ...

  8. Qt多线程的几种实现方式

    Qt多线程的几种实现方式 在Qt中经常会遇到耗时操作,需要并发执行,这个时候就要用到多线程.Qt的多线程有多种实现形式,这里介绍3种方式. 类实现形式 用类实现多线程是最传统的实现形式,思想是写一个继 ...

  9. QT多线程接收串口数据

    ** QT多线程接收串口数据 ** 1.前言 QT多线程的使用,和绝大数人一样,犯了错误(请查阅Qt开发人员( Bradley T. Hughes)Blog中的文章 you are-doing-it- ...

最新文章

  1. 飞机的“黑色十分钟”能被人工智能消灭吗?
  2. Tomcat - Tomcat 8.5.55 启动过程源码分析阶段二_load加载初始化
  3. Java 洛谷 P1426 小鱼会有危险吗
  4. linux kernel中的中断处理流程
  5. 【转载】SDRAM时钟相移估算
  6. jQuery事件2——off取消事件绑定
  7. 用盛金公式求解一元三次方程
  8. tcp和udp的区别和三次 四次挥握手 http://www.cnblogs.com/bizhu/archive/2012/05/12/2497493.html...
  9. 2020年抖音美妆直播报告
  10. android跳转到相册需要权限,Android打开相册获取图片路径
  11. Silverlight+WCF 新手实例 象棋 棋子移动-规则补充(三十七)
  12. 使用 做签名的post_使用 Go 添加 JWT 认证
  13. SAS 入门(二)实战篇
  14. 使用邮件合并批量制作工资条并进行发送邮件
  15. Struts2拦截器Filter
  16. python数据可视化例子
  17. 面包板电源线怎么接_如何维修面包板电源
  18. Qt交叉编译移植arm开发板
  19. 思科路由器的介绍及实战
  20. 参加了iDOF2016会议,发表演讲“油田SOA与云平台的系统思考与实践”

热门文章

  1. VTK序列图像的读取
  2. matlab 批量缩小图片
  3. 【云炬大学生创业基础笔记】第1章第2节关于什么是创客的讨论
  4. [云炬创业管理笔记]第三章打造优秀创业团队讨论3
  5. 科大星云诗社动态20210412
  6. 科大星云诗社动态20210818
  7. [一维粒子模拟 version3.6]成功实现初次诊断函数
  8. VTK修炼之道37:图像平滑_高斯滤波器
  9. Delphi 数据类型列表
  10. oracle - emctl start dbconsole