千家信息网

Qt5.9如何实现简单的多线程

发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,本篇文章给大家分享的是有关Qt5.9如何实现简单的多线程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Qt开启多线程,主要用到类QThr
千家信息网最后更新 2024年11月27日Qt5.9如何实现简单的多线程

本篇文章给大家分享的是有关Qt5.9如何实现简单的多线程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Qt开启多线程,主要用到类QThread。有两种方法,第一种用一个类继承QThread,然后重新改写虚函数run()。当要开启新线程时,只需要实例该类,然后调用函数start(),就可以开启一条多线程。第二种方法是继承一个QObject类,然后利用moveToThread()函数开启一个线程槽函数,将要花费大量时间计算的代码放入该线程槽函数中。第二种方法可以参考我写的另一篇博客:https://www.yisu.com/article/223796.htm

下面我总结的主要是第一种方法。(注意:只有在run()函数里面才是新的线程,所有复杂逻辑都应该在run()函数里面做。当run()函数运行完毕后,该线程生命周期结束。)

创建多线程步骤如下:

a1新建一个类MyThread,基类为QThread。

a2重写类MyThread的虚函数void run();,即新建一个函数protected void run(),然后对其进行定义。

a3在需要用到多线程的地方,实例MyThread,然后调用函数MyThread::start()后,则开启一条线程,自动运行函数run()。

a4当停止线程时,调用MyThread::wait()函数,等待线程结束,并且回收线程资源。

1.1新建一个widget工程,不要勾选ui界面。然后分别在mythread.h,mythread.cpp,widget.h,widget.cpp,main.cpp分别添加如下代码。

mythread.h

#ifndef MYTHREAD_H#define MYTHREAD_H #include  class MyThread : public QThread{public:    MyThread();    void closeThread(); protected:    virtual void run(); private:    volatile bool isStop;       //isStop是易失性变量,需要用volatile进行申明}; #endif // MYTHREAD_H

mythread.cpp

#include "mythread.h"#include #include  MyThread::MyThread(){    isStop = false;} void MyThread::closeThread(){    isStop = true;} void MyThread::run(){    while (1)    {        if(isStop)            return;        qDebug()<

widget.h

#ifndef WIDGET_H#define WIDGET_H #include #include #include #include #include  class Widget : public QWidget{    Q_OBJECT public:    Widget(QWidget *parent = 0);    ~Widget();    void createView(); private slots:    void openThreadBtnSlot();    void closeThreadBtnSlot();    void finishedThreadBtnSlot();//    void testBtnSlot(); private:    QVBoxLayout *mainLayout;        MyThread *thread1;}; #endif // WIDGET_H

widget.cpp

#include "widget.h"#include #include  Widget::Widget(QWidget *parent)    : QWidget(parent){    createView();} void Widget::createView(){    /*添加界面*/        QPushButton *openThreadBtn = new QPushButton(tr("打开线程"));    QPushButton *closeThreadBtn = new QPushButton(tr("关闭线程"));    mainLayout = new QVBoxLayout(this);    mainLayout->addWidget(openThreadBtn);    mainLayout->addWidget(closeThreadBtn);    mainLayout->addStretch();    connect(openThreadBtn,SIGNAL(clicked(bool)),this,SLOT(openThreadBtnSlot()));    connect(closeThreadBtn,SIGNAL(clicked(bool)),this,SLOT(closeThreadBtnSlot()));         /*线程初始化*/    thread1 = new MyThread;    connect(thread1,SIGNAL(finished()),this,SLOT(finishedThreadBtnSlot()));} void Widget::openThreadBtnSlot(){    /*开启一个线程*/        thread1->start();    qDebug()<<"主线程id:"<closeThread();    thread1->wait();} void Widget::finishedThreadBtnSlot(){    qDebug()<

main.cpp

#include "widget.h"#include  int main(int argc, char *argv[]){    QApplication a(argc, argv);    Widget w;    w.resize(960,640);    w.show();     return a.exec();}

1.2程序构建和运行后,结果如下图所示:

以上就是Qt5.9如何实现简单的多线程,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

线程 函数 方法 运行 代码 实例 更多 界面 知识 篇文章 复杂 实用 信号 博客 变量 只有 周期 地方 就是 工作会 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 腾讯云数据库能连接js吗 服务器不同芯片的作用 服务器上面怎么做端口转发 怎样通过宏编辑关联数据库 沈亚军 网络安全 湖北项目软件开发哪家实惠 服务器资源生成下载地址 长沙手机棋牌软件开发 PHP服务器怎么限制地域访问 粤省事下载电子证照服务器异常 运维与网络安全有什么关系 勉县网络安全宣传 青岛软件开发多少钱 my数据库 使用教程 服务器批量架设 航空公司软件开发岗笔试 mc外网服务器 黎珍辉对软件开发的看法 3dmax服务器拒绝访问 高端软件开发如何就业 互联网推广加鸣远科技 重装mysql已指定服务器名称 杂志锁屏不更新是服务器坏了吗 网络安全哪些该做哪些不该做 网络安全团日相关图片 网络技术与平面设计哪个好 二零二一年招聘软件开发旺季 王牌战争怎么把自己的服务器找到 网络安全溯源分析报告 l2tp手机服务器配置教程
0