【QT】qt中多线程的使用

前景:

C#中的多线程举例

csharp 复制代码
	private Thread threadDownLoadParameter;
 threadDownLoadParameter = new Thread(new ThreadStart(parameterInterface.downParameterLoadData)); //parameterInterface 实例对象,downParameterLoadData 方法
 threadDownLoadParameter.Start();

qt中对应的多线程的使用举例

目标类继承QThread 覆写虚函数function run()

cpp 复制代码
#include <QCoreApplication>
#include <QThread>
#include <QDebug>

class ParameterI  : public QObject
{
    Q_OBJECT

public slots:
    void downParameterLoadData()
    {
        // 在这里实现 downParameterLoadData 方法的功能
        qDebug() << "downParameterLoadData executed on thread" << QThread::currentThreadId();
    }
};

class DownloaderThread : public QThread
{
public:
    void run() override
    {
        // 在这里创建 ParameterI  实例,并调用 downParameterLoadData
        ParameterI  parameterInterface;
        parameterInterface.downParameterLoadData();
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建 DownloaderThread 实例
    DownloaderThread downloaderThread;

    // 启动线程
    downloaderThread.start();

    // 等待线程结束
    downloaderThread.wait();

    return a.exec();
}

补充: 2023年12月27日

线程类 QThread

cpp 复制代码
// 和调用 exit() 效果是一样的
// 代用这个函数之后, 再调用 wait() 函数
[slot] void QThread::quit();
// 启动子线程
[slot] void QThread::start(Priority priority = InheritPriority);
// 线程退出, 可能是会马上终止线程, 一般情况下不使用这个函数
[slot] void QThread::terminate();

// 线程中执行的任务完成了, 发出该信号
// 任务函数中的处理逻辑执行完毕了
[signal] void QThread::finished();
// 开始工作之前发出这个信号, 一般不使用
[signal] void QThread::started();
   

大丙

使用方式:

①需要创建一个线程类的子类,让其继承QT中的线程类 QThread

②重写父类的 run() 方法,在该函数内部编写子线程要处理的具体的业务流程

③在主线程中创建子线程对象,new 一个就可以了

④启动子线程, 调用 start() 方法

cpp 复制代码
class MyThread:public QThread①
{
 protected:
    void run()
    {
        ........②
    }
}


③MyThread * subThread = new MyThread;

④subThread->start();
ps:不能在类的外部调用run() 方法启动子线程,在外部调用start()相当于让run()开始运行【见于connect操作时,接收的对象的不同

特别留意:
当子线程别创建出来之后,父子线程之间的通信可以通过信号槽的方式,注意事项:

在Qt中在子线程中不要操作程序中的窗口类型对象, 不允许, 如果操作了程序就挂了

只有主线程才能操作程序中的窗口对象, 默认的线程就是主线程, 自己创建的就是子线程

相关推荐
GSDjisidi几秒前
东京本社招聘 | 财务负责人 & 多个日本IT岗位(Java/C++/Python/AWS 等),IT营业同步招募
java·开发语言·aws
skywalk81631 分钟前
copyparty 是一款使用单个 Python 文件实现的内网文件共享工具,具有跨平台、低资源占用等特点,适合需要本地化文件管理的场景
开发语言·python
BYSJMG6 分钟前
计算机毕设选题:基于Python+MySQL校园美食推荐系统【源码+文档+调试】
大数据·开发语言·python·mysql·django·课程设计·美食
Zz_waiting.11 分钟前
案例开发 - 日程管理 - 第七期
开发语言·前端·javascript·vue.js·html·路由
writeone11 分钟前
9-10关于JS初学产生的问题
开发语言·javascript·ecmascript
索迪迈科技1 小时前
Flink Task线程处理模型:Mailbox
java·大数据·开发语言·数据结构·算法·flink
草莓熊Lotso2 小时前
《算法闯关指南:优选算法-双指针》--01移动零,02复写零
c语言·c++·经验分享·算法·leetcode
太阳的后裔2 小时前
随笔一些用C#封装的控件
开发语言·c#
tianyuanwo2 小时前
Rust语言组件RPM包编译原理与Cargo工具详解
开发语言·网络·rust·rpm
ajassi20006 小时前
开源 C++ QT Widget 开发(十五)多媒体--音频播放
linux·c++·qt·开源