QT多线程的各种用法

本文介绍了QT框架下四种多线程的使用方法:1)QThread基本使用,通过继承并覆盖run函数实现;2)通过信号槽机制进行通信;3)使用QRunnable和QThreadPool管理线程池;4)利用QtConcurrent::run执行并发任务。这些示例展示了QT在多线程编程中的灵活性和实用性。
摘要由CSDN通过智能技术生成

以下是一些常见的QT多线程用法,并且包含了一些简单的代码示例:

1. QThread的基本使用

#include <QThread>

class MyThread : public QThread {
public:
    void run() {
        // 线程实际执行的代码
    }
};

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

    MyThread thread;
    thread.start(); // 启动线程

    // 等待线程结束
    if(thread.wait(/*timeout in ms*/)) {
        return 0;
    } else {
        return 1;
    }
}
2. 信号槽机制
#include <QThread>

class MyThread : public QThread {
signals:
    void progressChanged(int progress);

public:
    void run() {
        for(int i = 0; i < 100; i++) {
            // 省略耗时操作
            emit progressChanged(i);
        }
    }
};

class MainWindow : public QMainWindow {
public:
    MainWindow() {
        MyThread *thread = new MyThread(this);
        connect(thread, SIGNAL(progressChanged(int)), this, SLOT(onProgressChanged(int)));
        thread->start();
    }

private slots:
    void onProgressChanged(int progress) {
        // 更新进度条等 UI 控件
    }
};
3. QRunnable 和 QThreadPool 的使用
#include <QRunnable>
#include <QThreadPool>

class MyRunnable : public QRunnable {
public:
    void run() {
        // 线程实际执行的代码
    }
};

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

    QThreadPool *threadPool = QThreadPool::globalInstance();
    MyRunnable *runnable = new MyRunnable();

    threadPool->start(runnable);

    // 等待所有任务结束
    threadPool->waitForDone();

    return 0;
}
4. QtConcurrent::run() 的使用
#include <QtConcurrent>

void myFunction() {
    // 线程实际执行的代码
}

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

    QtConcurrent::run(myFunction);
    return 0;
}
这些示例只是Qt多线程用法的冰山一角。QT提供了许多不同的工具和类,可以帮助您在QT应用程序中实现高效和可扩展的多线程编程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值