一、第一种方法是用一个类继承QThread,然后重新改写虚函数run()。
创建多线程步骤如下:
- 新建一个类MyThread,基类为QThread。
- 重写类MyThread的虚函数void run();,即新建一个函数protected void run(),然后对其进行定义。
- 在需要用到多线程的地方,实例MyThread,然后调用函数MyThread::start()后,则开启一条线程,自动运行函数run()。
- 当停止线程时,调用MyThread::wait()函数,等待线程结束,并且回收线程资源。
原文链接:https://blog.csdn.net/naibozhuan3744/article/details/81174681
二、第二种方法是通过继承对象QObject,来实现多线程。(推荐)
利用继承QObject方法创建多线程,主要的步骤有一下几点:(注意:退出线程循环后,还要调用QThread::quit()函数,该线程才会触发QThread::finished()信号)
- 首先创建一个类MyThread,基类为QObject。
- 在类MyThread中创建一个槽函数,用于运行多线程里面的代码。所有耗时代码,全部在这个槽函数里面运行。
- 实例一个QThread线程对象(容器),将类MyThread的实例对象转到该容器中,用函数void QObject::moveToThread(QThread *thread);
myObjectThread->moveToThread(firstThread); - 用一个信号触发该多线程槽函数,比如用QThread::started()信号。
connect(firstThread, &QThread::started, myObjectThread, &MyThread::startThreadSlot); - 用信号QThread::finished绑定槽函数QThread::deleteLatater(),在线程退出时,销毁该线程和相关资源。
connect(firstThread, &QThread::finished, firstThread, &MyThread::deleteLater); - 所有线程初始化完成后,启动函数QThread::start()开启多线程,然后自动触发多线程启动信号QThread::started()。
原文链接:https://blog.csdn.net/naibozhuan3744/article/details/81201502
网友评论