很多文章教程都说Qt在启动子线程时,子线程对象调用start,start直接调用重写的run(),这样实现了多线程,为什么start()会调用run()呢,在哪里看的到,别人是如何知道的呢,看完这篇文章你将会清楚。
我们从Qt的源码开始。
QThread源码目录D:\Qt5.12.4\5.12.4\Src\qtbase\src\corelib, 在QtCreator中打开corelib.pro即可看到源码
我的Qt是windows版本,那么需要看后缀是_win的代码。
QThread::start()源码qthread_win.cpp
void QThread::start(Priority priority)
{
Q_D(QThread);
QMutexLocker locker(&d->mutex);
//如果线程运行结束
if (d->isInFinish) {
locker.unlock();
wait();
locker.relock();
}
//如果正在运行
if (d->running)
return;
//非以上状态,线程就绪,准备运行
d->running = tru