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工具
本文通过子类化QThread并重写run()方法,演示了如何在Qt环境中实现多线程应用。示例中,Worker线程继承自QThread,并在启动时递减静态成员变量num直至为0,同时输出当前线程名称及剩余数值。

被折叠的 条评论
为什么被折叠?



