task_pool.h
#ifndef TASK_POOL_H
#define TASK_POOL_H
#include <QObject>
#include <QRunnable>
class task_pool : public QObject,public QRunnable//多继承
{
Q_OBJECT
public:
explicit task_pool(QObject *parent = nullptr);
void run() override;//run方法
signals:
void task_signal(int var);
};
#endif // TASK_POOL_H
task_pool.cpp
#include "task_pool.h"
#include <unistd.h>
task_pool::task_pool(QObject *parent)
: QObject{parent}
{
this->setAutoDelete(true);//自动析构
}
void task_pool::run()
{
int i = 0;
for(;;)
{
emit task_signal(i++);
sleep(1);
if(i>10)
{
break;
}
}
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QThreadPool>
#include "task_pool.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
task_pool *ptr_taskpool;
QThreadPool *ptr_threadpool;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ptr_taskpool = new task_pool;
ptr_threadpool = QThreadPool::globalInstance();
connect(ptr_taskpool,&task_pool::task_signal,[=](int var){
ui->lcdNumber->display(var);
});
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
ptr_threadpool->start(ptr_taskpool);
}