19、Qt线程(四):继承QRunnable类

一、功能说明

1、通过继承QRunnable,重写run的方式实现多线程

2、点击“开始”按钮启动子线程;

二、项目创建

1、新建Qt Widgets Application应用,名称为Runnable,基类选择QMainWindow;

2、MainWindow.ui中放入一个Push Button按钮,第一个text改为“开始”,objectNme改为startPushButton;

3、添加新的C++类,名称为MyRunnable,基类设置为QRunnable

4、注:

QRunnable的使用方式与QThread类似,但是QRunnable不能使用信号槽,可以使用QMetaObject::invokeMethod()

三、代码展示

1、myrunnable.h

#ifndef MYRUNNABLE_H
#define MYRUNNABLE_H

#include <QRunnable>
#include <QWidget>

class MyRunnable : public QRunnable
{
public:
    explicit MyRunnable();
    ~MyRunnable();

protected:
    void run();
};

#endif // MYRUNNABLE_H

2、myrunnable.cpp

#include "myrunnable.h"
#include <QDebug>
#include <QThread>

MyRunnable::MyRunnable()
{
    qDebug() << "MyRunnable(): " << QThread::currentThreadId();
}

MyRunnable::~MyRunnable()
{
    qDebug() << "~MyRunnable(): " << QThread::currentThreadId();
}

void MyRunnable::run()
{
    qDebug() << "MyRunnable::run()" << QThread::currentThreadId();
}

3、mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "myrunnable.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_startPushButton_clicked();

private:
    Ui::MainWindow *ui;

    MyRunnable *m_myRunnable;
};

#endif // MAINWINDOW_H

4、mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QThread>
#include <QDebug>
#include <QThreadPool>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_myRunnable = new MyRunnable;
    qDebug() << "MainWindow() " << QThread::currentThreadId();
}

MainWindow::~MainWindow()
{
    if(!m_myRunnable)
    {
        delete m_myRunnable;
        m_myRunnable = nullptr;
    }
    delete ui;
}

void MainWindow::on_startPushButton_clicked()
{
    qDebug() << "on_startPushButton_clicked() " << QThread::currentThreadId();
    QThreadPool::globalInstance()->start(m_myRunnable);
}

四、运行测试

运行程序,点击开始,输出框输出如下信息

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值