【Qt学习】06 Qt多线程之QThread用法

多线程的优势

1、合理安排负载。对于图形界面程序尤其重要,当一个操作耗时很长,整个程序都会等待这个操作,程序就不能及时响应键盘鼠标等操作。多线程可以将耗时长的操作置于新的线程上,从而避免这个问题的发生。

2、提高系统效率。操作系统调度多线程任务运行到不同的CPU核心,从而避免系统资源浪费。

3、改善程序结构。一个既长又复杂的进程可以分解为多个线程,成为独立的运行部分,有利于代码的理解和维护。

 

环境

IDE:Qt creator 4.11.0

编译器:MinGW 5.3.0 32bit for C++

 

例子

1、OneThread.h文件

#ifndef ONETHREAD_H
#define ONETHREAD_H

#include <QThread>

class OneThread : public QThread
{
    Q_OBJECT
public:
    explicit OneThread(QObject *parent = nullptr);

protected:
    void run();

signals:
    void over();
};

#endif // ONETHREAD_H

 

2、OneThread.cpp文件

#include "OneThread.h"

OneThread::OneThread(QObject *parent) : QThread(parent)
{

}

void OneThread::run()
{
    sleep(5);
    emit over();
}

 

3、mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include <OneThread.h>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

public:
    void pushButtonClicked();
    void dealTimeout();

private slots:
    void dealover();


private:
    Ui::MainWindow *ui;

    QTimer *m_Timer;
    OneThread *m_OneThread;
};
#endif // MAINWINDOW_H

 

4、mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_Timer = new QTimer(this);
    m_OneThread = new OneThread(this);

    connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::pushButtonClicked);
    connect(m_Timer, &QTimer::timeout, this, &MainWindow::dealTimeout);
    connect(m_OneThread, &OneThread::over, this, &MainWindow::dealover);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::pushButtonClicked()
{
    m_Timer->start(100);
    m_OneThread->start();
}

void MainWindow::dealTimeout()
{
    static int time = 0;
    ui->lcdNumber->display(time);
    time ++;
}

void MainWindow::dealover()
{
    m_Timer->stop();
}

 

5、main.cpp文件

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

 

6、mainwindow.ui文件

 

7、效果。

 

 

8、代码下载

地址:https://download.csdn.net/download/sunriver2000/12555944

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值