本章会挑出QThread源码中部分重点代码来说明QThread启动到结束的过程是怎么调度的。其次因为到了Qt4.4版本,Qt的多线程就有所变化,所以本章会以Qt4.0.1和Qt5.6.2版本的源码来进行浅析。
一、QThread类的定义源码
Qt4.0.1版本源码:
#ifndef QT_NO_THREAD
class Q_CORE_EXPORT QThread : public QObject
{
public:
...//省略
explicit QThread(QObject *parent = 0);
~QThread();
...//省略
void exit(int retcode = 0);
public slots:
void start(QThread::Priority = InheritPriority); //启动线程函数
void terminate(); //强制退出线程函数
void quit(); //线程退出函数
...//省略
signals:
void started(); //线程启动信号
void finished(); //线程结束信号
...//省略
protected:
virtual void run() = 0;
int exec();
...//省略
};
#else // QT_NO_THREAD
Qt5.6.2版本源码:
#ifndef QT_NO_THREAD
class Q_CORE_EXPORT QThread : public QObject
{
Q_OBJECT
public:
...//省略
explicit QThread(QObject *parent = Q_NULLPTR);
~QThread();
...//省略
void exit(int retcode = 0); //线程退出函数
...//省略
public Q_SLOTS:
void start(Priority = InheritPriority); //启动线程函数
void terminate(); //强制退出线程函数
void quit(); //线程退出函数
...//省略
Q_SIGNALS:
void started(QPrivateSignal); //线程启动信号
void finished(QPrivateSignal

本文解析了QThread类在不同Qt版本中的定义与实现差异,详细介绍了线程从启动到结束的整个流程,包括start()、run()等关键方法的作用及内部机制。
最低0.47元/天 解锁文章
828





