当前位置: 首页 > news >正文

QT学习之旅 - QThread多线程

文章目录

      • 首先是主线程
      • 其次是一个程序
      • 通过一个QThread来放入程序
      • 进阶一点: 手动开启关闭线程
      • 俩个线程

其实QT中的thread(线程)是很容易的

首先是主线程

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//threadTest = new ThreadTest;//线程实例//threadTest->start();//开启线程for(int i=0;i<100;i++){qDebug() << "mainwindow i:" << i;_sleep(500);}}MainWindow::~MainWindow()
{delete ui;
}

其次是一个程序

#include "test.h"
#include <QDebug>Test::Test()
{for(int i=0;i<100;i++){qDebug() << "i=" << i;_sleep(1000);}
}Test::~Test(){}

通过一个QThread来放入程序

#include "threadtest.h"
#include <QDebug>ThreadTest::ThreadTest()
{}void ThreadTest::run(){test = new Test;
}
void ThreadTest::stop(){}ThreadTest::~ThreadTest(){}

一个简单的线程就实现了

进阶一点: 手动开启关闭线程

添加一个按键,通过信号和槽来控制线程使能关闭

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QDebug>
#include <QPushButton>bool isTrue;MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);isTrue = true;threadTest = new ThreadTest;connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::on_button_test);for(int i=0;i<100;i++){qDebug() << "mainwindow i:" << i;_sleep(100);}}void MainWindow::on_button_test(){if(isTrue){threadTest->start();isTrue = false;ui->pushButton->setText("关闭线程");}else{threadTest->stop();isTrue = true;ui->pushButton->setText("开启线程");}
}MainWindow::~MainWindow()
{delete ui;
//    threadTest->de;delete threadTest;
}
#include "threadtest.h"
#include <QDebug>ThreadTest::ThreadTest()
{}void ThreadTest::run(){test = new Test;
}
void ThreadTest::stop(){this->quit();this->wait();
}ThreadTest::~ThreadTest(){}

Test不变。现象mainwindow i:99(执行完)后窗口出现,之后开启线程。开启后立马关闭,会执行到i=99(线程执行完)后才关闭

俩个线程

继第一个线程后,我们再来一个线程,也是在主函数中实例。查看情况

#include "threadtesttwo.h"
#include <QDebug>ThreadTestTwo::ThreadTestTwo()
{}
void ThreadTestTwo::run(){for(int i=0;i<100;i++){qDebug() << "threadTwo i=" << i;_sleep(200);}
}
void ThreadTestTwo::stop(){}
ThreadTestTwo::~ThreadTestTwo(){}
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QDebug>
#include <QPushButton>bool isTrue;MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);isTrue = true;threadTest = new ThreadTest;threadTestTwo = new ThreadTestTwo;connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::on_button_test);}void MainWindow::on_button_test(){if(isTrue){threadTest->start();threadTestTwo->start();isTrue = false;ui->pushButton->setText("关闭线程");}else{threadTest->stop();threadTestTwo->stop();isTrue = true;ui->pushButton->setText("开启线程");}
}MainWindow::~MainWindow()
{delete ui;delete threadTest;
}
http://www.lryc.cn/news/94932.html

相关文章:

  • PROFINET转TCP/IP网关TCP/IP协议的含义是
  • 计算机网络基础第六章
  • MobPush:Android客户端SDK厂商通道回执配置指南
  • Karmada: Open, Multi-Cloud, Multi-Cluster Kubernetes Orchestration
  • arcgis拓扑检查
  • icp许可证 办理流程(icp资质申请条件)
  • 三菱PLC 控制灯一秒钟交替闪烁
  • 金融数据库的战场,太平洋保险和OceanBase打了场胜仗
  • IP协议【图解TCP/IP(笔记九)】
  • C#仿热血江湖
  • Nginx静态资源部署
  • javaee jstl表达式
  • ChatGPT是否具有记忆能力?
  • ARP协议(地址分析协议)
  • c# websocket client java websocket server
  • 【玩转循环】探索Python中的无限可能性
  • 网安学习经历小记
  • MyBatis之慎用association
  • 【Java/大数据】Kafka简介
  • 【动手学深度学习】读写文件
  • http-server 的安装与使用
  • SQL高级教程
  • 9.pixi.js编写的塔防游戏(类似保卫萝卜)-群炮弹发射逻辑
  • 分布式链路追踪
  • 计算机网络————网络层
  • el-table刷新后保持高亮并改变状态字段
  • ARM Ubuntu内核更新记录
  • 【sgUploadTray】上传托盘自定义组件,可实时查看上传列表进度
  • 改进二进制粒子群算法在配电网重构中的应用(Matlab实现)【论文复现】
  • 【文章系列解读】Nerf