VS2022+QT6.7.2 多线程使用(两种方式)(详细)

目录

一、使用QThread类

二、继承QObject

三、其他


一、使用QThread类

(话不多说,直接上代码)

QtWidgetsApplication8.h

#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication8.h"
#include<QThread> //引入线程头文件
#include<Qdebug>

class QtWidgetsApplication8 : public QMainWindow
{
    Q_OBJECT

public:
    QtWidgetsApplication8(QWidget *parent = nullptr); //构造函数
    ~QtWidgetsApplication8();  //析构函数声明

private:
    Ui::QtWidgetsApplication8Class ui;
};
 
class MyThread : public QThread // 创建 MyThread 类继承 QThread
{
public:
    void run(); // 声明,重写run函数
};

 main.cpp

#include "QtWidgetsApplication8.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QtWidgetsApplication8 w;
    // 获取主线程ID
    qDebug()<<"主线程ID:"<<QThread::currentThreadId();
    w.show();
    return a.exec();
}

 QtWidgetsApplication8.cpp

#include "QtWidgetsApplication8.h"

QtWidgetsApplication8::QtWidgetsApplication8(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    MyThread *thread = new MyThread; //创建线程
    thread->start();  //启动线程
}
QtWidgetsApplication8::~QtWidgetsApplication8()  //析构函数
{

}
void MyThread::run()  //run函数的定义
{
    // 获取子线程ID
    qDebug() << "子线程ID:" << QThread::currentThreadId();
}

 具体实现如图所示,运行后在控制台中打印主线程ID、子线程ID。

二、继承QObject

QtWidgetsApplication8.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication8.h"
#include<QThread>
#include<Qdebug>

class QtWidgetsApplication8 : public QMainWindow
{
    Q_OBJECT

public:
    QtWidgetsApplication8(QWidget *parent = nullptr);
    ~QtWidgetsApplication8(); // 析构函数声明

private:
    Ui::QtWidgetsApplication8Class ui;
};

class mythread2 :public QObject // 继承QObject
{
    Q_OBJECT  // 必须加

public:
    void work(); // 线程函数
};

 main.cpp

#include "QtWidgetsApplication8.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QtWidgetsApplication8 w;
    // 获取主线程ID
    qDebug()<<"主线程ID:"<<QThread::currentThreadId();
    w.show();
    return a.exec();
}

  QtWidgetsApplication8.cpp

#include "QtWidgetsApplication8.h"

QtWidgetsApplication8::QtWidgetsApplication8(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    QThread *thread = new QThread(); //创建线程
    mythread2 *st = new mythread2(); //创建对象
    st->moveToThread(thread); //将对象移动到线程中
    
    // 连接线程启动信号到work槽  
    connect(thread,&QThread::started,st,&mythread2::work);

    thread->start(); //启动线程
}

QtWidgetsApplication8::~QtWidgetsApplication8()  //析构函数
{

}

void mythread2::work()
{
    qDebug() << "子线程ID:" << QThread::currentThreadId();
}

具体实现如图所示,运行后向控制台打印主线程ID、子线程ID

  1. 其中Q_OBJECT宏是必须加的,具体的可以去了解元对象编译器(Meta-Object Compiler,moc)
  2. moveToThread是Qt 中用于将对象移动到另一个线程的方法。通过调用 moveToThread() 函数,可以将一个 QObject 对象从当前线程移动到另一个线程中,从而实现对象在新线程中执行特定的任务。

三、其他

百度网盘链接: 提取码: ndcq

https://pan.baidu.com/s/12GrrFKyq-3BT8A8sxQGFcw?pwd=ndcq

下载后打开.sln工程文件即可

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
flowable是一个开源的、可扩展的业务流程管理引擎。它基于Java语言开发,可以与Spring框架无缝集成。flowable6.7.2是flowable的一个版本,在该版本中修复了一些已知的bug,并加入了一些新特性和改进。该版本的flowable可以在SpringBoot应用程序中使用。 SpringBoot是一个能够简化Spring应用开发的框架。它使用约定优于配置的原则,通过自动化配置和快速启动来减少开发者的工作量。使用SpringBoot可以快速搭建和部署应用程序,并且可以与各种流行的开发框架和技术无缝集成。 Vue是一种用于构建用户界面的渐进式JavaScript框架。它主要用于构建单页面应用程序,可以通过组件化方式构建复杂的用户界面。Vue具有简单易用、灵活、高效等特点,支持双向数据绑定和组件化的开发模式。Vue和SpringBoot可以通过RESTful API进行交互,实现前后端的分离开发。 当使用flowable6.7.2时,可以将其集成到SpringBoot应用程序中,以便在应用中使用业务流程管理功能。可以通过引入适当的依赖和进行配置来实现集成。同时,可以使用Vue来构建应用程序的用户界面,通过向后端发送请求和接收响应来实现与flowable的交互。可以通过调用flowable的API来管理和执行业务流程,并将结果通过RESTful API返回给前端的Vue组件进行展示和交互。 总而言之,flowable6.7.2可以与SpringBoot和Vue无缝集成,实现一个具备业务流程管理功能的应用程序。SpringBoot提供了后端的支持,Vue提供了前端的支持,而flowable则负责业务流程的管理和执行。这样的架构可以提高开发效率和应用程序的稳定性,使开发者能够更加专注于业务逻辑的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值