1. 定义线程任务
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
#include <QDebug>
class myThread : public QThread
{
Q_OBJECT
public:
myThread();
~myThread();
void setTask(const std::function<void ()> &task);
signals:
void sigFinish();
protected:
void run();
private:
std::function<void()> m_task = nullptr;
};
#endif
#include "mythread.h"
myThread::myThread()
{
connect(this, &QThread::finished, this ,&QObject::deleteLater);
}
myThread::~myThread()
{
qDebug() << "destory myThread";
}
void myThread::setTask(const std::function<void ()> &task)
{
m_task = task;
}
void myThread::run()
{
if(m_task != nullptr){
m_task();
emit sigFinish();
}
}
2. 测试代码
#include "mythread.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qDebug() << "main thread id:" << QThread::currentThreadId();
myThread* thread = new myThread;
thread->setTask([](){
qDebug() << "my thread id:" << QThread::currentThreadId();
});
QObject::connect(thread, &myThread::sigFinish, [](){
qDebug() << "My thread task has finished";
});
thread->start();
return a.exec();
}
3 运行结果
main thread id: 0x2014
my thread id: 0x2438
My thread task has finished
destory myThread