美文网首页
QT多线程的两种方法

QT多线程的两种方法

作者: 锋之律 | 来源:发表于2019-07-23 08:59 被阅读0次

一、第一种方法是用一个类继承QThread,然后重新改写虚函数run()。

创建多线程步骤如下:

  1. 新建一个类MyThread,基类为QThread。
  2. 重写类MyThread的虚函数void run();,即新建一个函数protected void run(),然后对其进行定义。
  3. 在需要用到多线程的地方,实例MyThread,然后调用函数MyThread::start()后,则开启一条线程,自动运行函数run()。
  4. 当停止线程时,调用MyThread::wait()函数,等待线程结束,并且回收线程资源。

原文链接:https://blog.csdn.net/naibozhuan3744/article/details/81174681

二、第二种方法是通过继承对象QObject,来实现多线程。(推荐)

利用继承QObject方法创建多线程,主要的步骤有一下几点:(注意:退出线程循环后,还要调用QThread::quit()函数,该线程才会触发QThread::finished()信号)

  1. 首先创建一个类MyThread,基类为QObject。
  2. 在类MyThread中创建一个槽函数,用于运行多线程里面的代码。所有耗时代码,全部在这个槽函数里面运行。
  3. 实例一个QThread线程对象(容器),将类MyThread的实例对象转到该容器中,用函数void QObject::moveToThread(QThread *thread);
    myObjectThread->moveToThread(firstThread);
  4. 用一个信号触发该多线程槽函数,比如用QThread::started()信号。
    connect(firstThread, &QThread::started, myObjectThread, &MyThread::startThreadSlot);
  5. 用信号QThread::finished绑定槽函数QThread::deleteLatater(),在线程退出时,销毁该线程和相关资源。
    connect(firstThread, &QThread::finished, firstThread, &MyThread::deleteLater);
  6. 所有线程初始化完成后,启动函数QThread::start()开启多线程,然后自动触发多线程启动信号QThread::started()。

原文链接:https://blog.csdn.net/naibozhuan3744/article/details/81201502

注:Linux下也可以直接使用pthread

相关文章

网友评论

      本文标题:QT多线程的两种方法

      本文链接:https://www.haomeiwen.com/subject/ubpnlctx.html