ThreadInherit 示例
前言
演示子类化QThread来实现多线程。
核心函数:[virtual protected] void QThread::run()
线程的入口点。在调用start()之后,新创建的线程将调用此函数。默认实现只是调用exec()。
可以重新实现此函数以方便高级线程管理。从这个方法返回将结束线程的执行。
main.cpp 代码
#include <QtCore>
class Worker :public QThread{
Q_OBJECT
public:
Worker(){
connect(this,&QThread::finished,[=]{
qDebug() << objectName() << "isFinished = " <<this->isFinished();
this->quit();
if(!parent()) // 如果没有父对象,就自我销毁
this->deleteLater();
});
connect(this,&QObject::destroyed,[=]{
qDebug() << objectName() << "destroyed" ;
});
}
void run() override{
while(num > 0){
qDebug() << objectName() << num--;
}
}
static int num; // 静态成员变量
};
int Worker::num = 100; // 初始化
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
for (int i = 0; i < 5; ++i) {
Worker *worker = new Worker;
worker->setObjectName(QString("worker%1").arg(i+1));
worker->start();
}
QThread::sleep(1);
qDebug() << Worker::num;
a.exec();
return 0;
}
#include "main.moc" // moc工具