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

9:多线程(2)

方法一:run方法



WorkThread001.h

#ifndef WORKTHREAD001_H
#define WORKTHREAD001_H#include <QObject>
#include <QThread>    //线程
class WorkThread001 : public QThread
{Q_OBJECT
public:WorkThread001();bool  Status006=false;   //控制线程的 一个变量void run();void  SetBoolStatus0();void  SetBoolStatus1();signals:void  SendAnSignals(int x ,int y);};#endif // WORKTHREAD001_H

WorkThread001.cpp

#include "WorkThread001.h"#include <qdebug.h>
WorkThread001::WorkThread001()
{}void WorkThread001::run()
{//线程qDebug()<<"enter11";//    for (int i=0 ;i<=30;i++)
//    {
//        qDebug()<<"i:="<<i;
//        msleep(100);
//    }int  i=0;while(1){if(Status006){qDebug()<<"i:="<<i;i++;}}//自带一个信号
}void  WorkThread001:: SetBoolStatus0()
{Status006=true;
}
void  WorkThread001:: SetBoolStatus1()
{Status006=false;
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <./WorkThread01/WorkThread001.h>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();WorkThread001 *m_pWorkThread001=NULL;private slots:void on_pB_StartThread_clicked();void on_pushButton_clicked();void RobticsCatch();void on_pB_StopThread_clicked();void on_rB_StopCap_clicked();void on_rB_KeepCap_clicked();private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include  "qdebug.h"
#include  <qmessagebox.h>
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);m_pWorkThread001=new WorkThread001();//自带 一个信号 ,    finished  没有参数列表connect(m_pWorkThread001,SIGNAL(finished()),this,SLOT(RobticsCatch()));
}MainWindow::~MainWindow()
{if(m_pWorkThread001){delete m_pWorkThread001;}delete ui;
}void MainWindow::on_pB_StartThread_clicked()
{qDebug()<<"ener1";m_pWorkThread001->start();  //默认 执行run函数}void MainWindow::on_pushButton_clicked()
{bool Status=m_pWorkThread001->isFinished();if(Status){QMessageBox::warning(this,"warning","thread is  finished");return;}else{QMessageBox::warning(this,"warning","thread is  runing");return;}
}void MainWindow::RobticsCatch()
{qDebug()<<"RobticsCatch()";
}void MainWindow::on_pB_StopThread_clicked()
{if(m_pWorkThread001->isRunning()){qDebug()<<"enter quit";//BOOL  ----方法1  ,ui  修改 bool 变量//强制 推出m_pWorkThread001->terminate();  //强制退出m_pWorkThread001->wait();       //等待m_pWorkThread001->quit();m_pWorkThread001->exit();}
}void MainWindow::on_rB_StopCap_clicked()
{m_pWorkThread001->SetBoolStatus1();  //STOP}void MainWindow::on_rB_KeepCap_clicked()
{m_pWorkThread001->SetBoolStatus0();  //STOP
}

此方法不好管理多线程





方法二:thread方法


WorkThread2.h

#ifndef WORKTHREAD2_H
#define WORKTHREAD2_H
#include <qobject.h>class WorkThread2 : public QObject
{Q_OBJECT
public:WorkThread2();void ImageCapture();  //只是 普通函数public slots:};#endif // WORKTHREAD2_H

WorkThread2.cpp

#include "WorkThread2.h"
#include <QDebug>
int  i=0;
WorkThread2::WorkThread2()
{}void  WorkThread2::ImageCapture()
{//添加  boolwhile(1){qDebug()<<"i:="<<i;i++;}}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <WorkThread2.h>#include <QThread>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_pushButton_clicked();void on_pB_Cap0_clicked();void on_pushButton_2_clicked();private:Ui::MainWindow *ui;WorkThread2  *m_pWorkThread[3];  //采图流程QThread  *m_pQThread[3];     //线程指针数组signals:void SendCam0Cap();};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qdebug.h>
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{m_pWorkThread[0]->ImageCapture();
}void MainWindow::on_pB_Cap0_clicked()
{m_pWorkThread[0]=new WorkThread2(); //第一个流程类m_pQThread[0]=new QThread();   //xianchm_pWorkThread[0]->moveToThread(m_pQThread[0]);//connect(this,SIGNAL(SendCam0Cap()),m_pWorkThread2[0],SLOT(ImageCapture()));connect(this,&MainWindow::SendCam0Cap,m_pWorkThread[0],&WorkThread2::ImageCapture);m_pQThread[0]->start();emit SendCam0Cap();
}void MainWindow::on_pushButton_2_clicked()
{if(m_pQThread[0]->isRunning()){qDebug()<<"enter quit";//BOOL  ----方法1  ,ui  修改 bool 变量//强制 推出m_pQThread[0]->terminate();  //强制退出m_pQThread[0]->wait();       //等待m_pQThread[0]->quit();m_pQThread[0]->exit();}}

http://www.xdnf.cn/news/8758.html

相关文章:

  • 再论自然数全加和-2
  • 开疆智能Profinet转Profibus网关连接Type8644自动化控制系统案例
  • Pr -- 耳机没有Pr输出的声音
  • 算法笔记·数学·约数之和
  • PCIE 4.0 vs PCIE 5.0固态硬盘——区别、科普与选购场景全解析
  • yolov11使用记录(训练自己的数据集)
  • 无损图片压缩 本地处理 批量处理提升效率 无需联网+无广告
  • 代码混淆技术的还原案例
  • LangChain
  • [软件测试_5] 设计用例 | 等价法 | 判定表法 | 正交法(allpairs.exe)
  • 【人工智能】AI的炼金术:大模型训练的秘密配方
  • C语言-枚举
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据合并与对比-pd.concat():轴向拼接
  • wan2.1代码笔记
  • 简说IMM
  • AI 理论- 模型优化 - 注意力机制
  • 整平机技术进阶:从原理到实战的深度解析
  • MD5加密(Java)
  • 如何快速解决 java maven项目中jar冲突的问题
  • CAU人工智能class6 ResNet
  • 业务设计篇隐私合规检测URL 重定向资源拒绝服务配合项目
  • leetcode2466,爬楼梯变体,取模注意
  • 【第四篇】 SpringBoot整合第三方技术
  • 板凳-------Mysql cookbook学习 (六)
  • day25JS- es5面向对象、Proxy代理对象
  • ARM笔记-ARM指令集
  • PG Pebbles 靶机复现
  • 【C++】移动窗口
  • Java中使用Stream API优化for循环
  • [NOIP 2003 普及组] 麦森数 Java