Qt——多个线程打印数字
一、实现效果
这里是 5 个线程( t 0 , t 1 , t 2 , t 3 , t 4 t0 , t1 , t2 , t3 , t4 t0,t1,t2,t3,t4),循环打印 (0 ~ 9):
二、实现
创建一个名为 ThreadDialog
(项目名随便取)的项目,基类名也是 ThreadDialog
,旋转继承 QDialog
。
点击添加一个 WorkThread
类,让它继承 QThread
类。
threaddialog.h:
#ifndef THREADDIALOG_H
#define THREADDIALOG_H
#include <QDialog>
#include <QPushButton>
#include "workthread.h"
//创建的线程数量,这里我设置最多创建5个
const int MAX_SIZE = 5;
class ThreadDialog : public QDialog
{
Q_OBJECT
public:
ThreadDialog(QWidget *parent = nullptr);
~ThreadDialog();
public slots:
void slotStart();
void slotStop();
private:
QPushButton * startBtn;
QPushButton * stopBtn;
QPushButton * quitBtn;
//线程数组
WorkThread * workThread[MAX_SIZE];
};
#endif // THREADDIALOG_H
workthread.h:
#ifndef WORKTHREAD_H
#define WORKTHREAD_H
#include <QThread>
class WorkThread : public QThread
{
Q_OBJECT
public:
WorkThread();
protected:
void run() override;
};
#endif // WORKTHREAD_H
threaddialog.cpp :
#include "threaddialog.h"
#include <QHBoxLayout>
ThreadDialog::ThreadDialog(QWidget *parent)
: QDialog(parent)
{
this->setWindowTitle(tr("多线程"));
startBtn = new QPushButton(tr("开始"));
stopBtn = new QPushButton(tr("停止"));
quitBtn = new QPushButton(tr("退出"));
QHBoxLayout *mainLayout = new QHBoxLayout(this);
mainLayout->addWidget(startBtn);
mainLayout->addWidget(stopBtn);
mainLayout->addWidget(quitBtn);
//点击开始 启动线程
connect(startBtn,SIGNAL(clicked()),this,SLOT(slotStart()));
//点击停止,阻塞线程
connect(stopBtn,SIGNAL(clicked()),this,SLOT(slotStop()));
//点击退出,关闭弹窗,退出程序
connect(quitBtn,SIGNAL(clicked()),this,SLOT(close()));
}
void ThreadDialog::slotStart(){
for(int i = 0;i < MAX_SIZE;i++){
workThread[i] = new WorkThread();
workThread[i]->setObjectName("t" + QString::number(i));
}
for(int i = 0;i < MAX_SIZE;i++){
workThread[i]->start();
}
startBtn->setEnabled(false);
stopBtn->setEnabled(true);
}
void ThreadDialog::slotStop(){
for(int i = 0;i < MAX_SIZE;i++){
workThread[i]->terminate();
workThread[i]->wait();
}
startBtn->setEnabled(true);
stopBtn->setEnabled(false);
}
ThreadDialog::~ThreadDialog()
{
}
workthread.cpp:
#include "workthread.h"
#include <QtDebug>
WorkThread::WorkThread()
{
}
void WorkThread::run(){
while(true){
for(int i = 0;i < 10;i++){
qDebug()<<objectName()<<" : "<<i;
}
}
}
main.cpp :
#include "threaddialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
ThreadDialog w;
w.show();
return a.exec();
}
相关文章
- Qt之QHostInfo获取主机信息
- QT-Qt显示GIF图片
- s3c2410上搭建QT/Embedded4.8.5开发环境(四)--安装intel-x86 X11平台qt库qt-everywhere-opensource-src-4.8.5
- s3c2410上搭建QT/Embedded4.8.5开发环境(七)--命令行开始第一个Qt程序
- Qt音视频开发13-视频解码线程基类的设计
- Qt编写安防视频监控系统64-子模块8飞行轨迹
- Qt编写安防视频监控系统51-功能激活
- Qt编写安防视频监控系统5-视频回放
- Qt编写安防视频监控系统1-通道切换
- Qt编写物联网管理平台18-数据库设置
- 关于Qt高分屏缩放几个知识点
- Qt-QPixmap
- Qt进程与线程的概念、Qt多线程编程、多线程间的同步
- Qt创建线程程序示例
- Qt线程的生命周期
- Qt双缓冲机制与实例
- Qt进程和线程之一:运行一个进程和进程间通信
- QT 定时器学习
- Qt串口通信接收数据不完整_qt串口接收数据
- qt之QPainter绘制不规则图形
- Qt 之 使用 https:// 发送 HTTP请求
- QT-线程并发、QTcpServer并发、QThreadPool线程池
- Qt 最小化到托盘,程序退出
- (Qt)封装下串口类QSerialPort的线程操作
- Qt多线程:QtConcurrent + QFuture + QFutureWatcher
- Qt学习一门:直接使用QT具
- windows10+虚拟机(VMware12.5)+乌班图(ubuntu-18.04.4)+Qt(5.13.2)环境搭建亲测有效
- QT从控件部分知识点整理
- QT案例实战1 - 从零开始编写一个OCR工具软件 (6) 关于QThread线程的使用