qt中使用函数QObject::moveToThread(QThread *thread)实现多线程

1.首先创建一个类Myobject,基类为QObject
2.在类Myobject中创建一个槽函数,用于运行多线程里面的代码。耗时全部在这个槽函数里面运行
3.实例一个QThread线程对象
4.使用moveToThread
5.创建信号槽,started和finished
6.启动函数QThread::start()开启多线程

void Myobject::doSomethingSlot()
{
  while(1)
  {
      if(m_bStop)
          return;

      qDebug() << "111";
      QThread::sleep(1);

  }
}


void Myobject::stopSlot()
{
  QMutexLocker locker(&m_lock);
  m_bStop = true;
}



m_pmyobject = new Myobject;    
m_pmyThread = new QThread;    

m_pmyobject->moveToThread(m_pmyThread);  

connect(m_pmyThread, &QThread::started, m_pmyobject, &Myobject::doSomethingSlot);
connect(m_pmyThread, &QThread::finished, m_pmyobject, &Myobject::deleteLater);

void MainWindow::on_pushButton_clicked()//开启线程
{
    m_pmyThread->start();
}

void MainWindow::on_pushButton_2_clicked()//关闭线程
{       
    if(m_pmyThread->isRunning())
    {
        m_pmyobject->stopSlot();        //关闭线程槽函数
        m_pmyThread->quit();            //退出事件循环
        m_pmyThread->wait();            //释放线程槽函数资源
    }
}
posted @ 2024-05-24 14:15  隔壁老张爱吃鱼  阅读(264)  评论(0)    收藏  举报