评论

收藏

[jQuery] QThread源码分析:为什么start()会自动调用run()执行线程代码

开发技术 开发技术 发布于:2021-07-08 20:49 | 阅读数:378 | 评论:0

  很多文章教程都说Qt在启动子线程时,子线程对象调用start,start直接调用重写的run(),这样实现了多线程,为什么start()会调用run()呢,在哪里看的到,别人是如何知道的呢,看完这篇文章你将会清楚。
  我们从Qt的源码开始。
  QThread源码目录D:\Qt5.12.4\5.12.4\Src\qtbase\src\corelib, 在QtCreator中打开corelib.pro即可看到源码
DSC0000.png

  我的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
  
关注下面的标签,发现更多相似文章