Qt多线程编程两种方式详解

Qt多线程编程两种方式详解QT 的多线程编程主要有两种方式 第一种是继承自 QThread 然后重写 run 函数 第二种是继承自 QObject 然后把整个对象 moveToThread 两种方法比较 第一种方法只有 run 函数是运行在子线程中

欢迎大家来到IT世界,在知识的湖畔探索吧!

QT的多线程编程主要有两种方式:

第一种是继承自QThread,然后重写run()函数;

第二种是继承自QObject,然后把整个对象moveToThread;

两种方法比较:

第一种方法只有run()函数是运行在子线程中。如果在构造函数中调用其他方法,则该方法运行在主线程中;如果在run()函数中调用其他方法,则该方法运行在子线程中。

第二种方法整个对象都移入到一个子线程中,然后通过信号槽进行通信,该对象的所有槽函数都会在子线程中执行。如果在构造函数中调用其他方法,则该方法运行在主线程中;如果在槽函数函数中调用其他方法,则该方法运行在子线程中。

下面通过实例来介绍它们的使用:

第一种方法:

​​file_in.h​​

#ifndef FILE_IN_H #define FILE_IN_H #include <QThread> #include <QDebug> class File_in : public QThread { Q_OBJECT public: File_in(QObject *parent = 0); protected: void run(); void do_something(); }; #endif // FILE_IN_H

欢迎大家来到IT世界,在知识的湖畔探索吧!

​​file_in.cpp​​

欢迎大家来到IT世界,在知识的湖畔探索吧!#include "file_in.h" File_in::File_in(QObject *parent): QThread(parent) { qDebug()<<"file_in 构造函数"<<QThread::currentThreadId(); } void File_in::run() { qDebug()<<"file_in run()函数"<<QThread::currentThreadId(); do_something(); } void File_in::do_something() { qDebug()<<"file_in do_something()函数"<<QThread::currentThreadId(); }
Qt多线程编程两种方式详解



欢迎大家来到IT世界,在知识的湖畔探索吧!

从上面的运行可以看出run()函数与主线程不在同一个线程中,在run()函数中调用相应的方法,那这个方法也会在子线程中运行。

QT开发交流+赀料君羊:

第二种方法:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QThread *thread = new QThread; moveThread *movethread = new moveThread; movethread->moveToThread(thread); connect(thread,SIGNAL(started()),movethread,SLOT(test())); thread->start(); qDebug()<<"mainwindow构造函数"<<QThread::currentThreadId(); }
Qt多线程编程两种方式详解

先创建一个线程,然后把想要移入到子线程中运行的对象moveToThread就行了,然后该对象的所有槽函数就都会在子线程中运行了。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/132765.html

(0)
上一篇 18分钟前
下一篇 2025年 5月 31日 下午3:55

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信