多线程的优势
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