【QT5 多线程示例】线程池

线程池

【C++并发编程】(九)线程池

QThreadPoolQRunnable 是 Qt 提供的线程池管理机制。QRunnable 是一个任务抽象类;定义任务逻辑需要继承QRunnable 并实现 run() 方法。QThreadPool 负责管理线程,并将 QRunnable 任务分配到可用的线程上执行。 通过 QThreadPool::start(QRunnable *task) 提交任务,QThreadPool 会自动选择空闲线程来执行任务。

示例代码

https://github.com/BinaryAI-1024/QtStudy/tree/master/thread/threadpool

cpp 复制代码
// main.cpp
#include <QCoreApplication>
#include <QThreadPool>
#include <QRunnable>
#include <QDebug>
#include <QThread>

// 自定义任务类,继承 QRunnable
class MyTask : public QRunnable {
public:
    void run() override {
        qDebug() << "Task running on thread:" << QThread::currentThread();
        QThread::sleep(1);  // 模拟任务执行时间
    }
};

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

    QThreadPool *threadPool = QThreadPool::globalInstance(); // 获取全局线程池
    threadPool->setMaxThreadCount(4);  // 设置最大线程数

    for (int i = 0; i < 10; ++i) {
        MyTask *task = new MyTask();
        task->setAutoDelete(true);  // 任务完成后自动释放task指向的内存
        threadPool->start(task);
    }

    threadPool->waitForDone();  // 等待所有任务执行完毕
    return 0;
}

结果:

复制代码
Task running on thread: QThread(0xa947f68, name = "Thread (pooled)")
Task running on thread: QThread(0xa947de8, name = "Thread (pooled)")
Task running on thread: QThread(0xa947a68, name = "Thread (pooled)")
Task running on thread: QThread(0xa947c68, name = "Thread (pooled)")
Task running on thread: QThread(0xa947c68, name = "Thread (pooled)")
Task running on thread: QThread(0xa947de8, name = "Thread (pooled)")
Task running on thread: QThread(0xa947a68, name = "Thread (pooled)")
Task running on thread: QThread(0xa947f68, name = "Thread (pooled)")
Task running on thread: QThread(0xa947f68, name = "Thread (pooled)")
Task running on thread: QThread(0xa947c68, name = "Thread (pooled)")
相关推荐
被制作时长两年半的个人练习生几秒前
首尾元素相同的间隔循环策略
c++·笔记·循环·ptx
3***g2053 分钟前
MATLAB高效算法设计原则利用MATLAB内置函数
开发语言·算法·matlab
千里马-horse7 分钟前
React Native bridging 源码分析--ClassTest.cpp
javascript·c++·react native·react.js·bridging
知秋正在99610 分钟前
Java实现Html保存为.mhtml文件
java·开发语言·html
三月微暖寻春笋14 分钟前
【和春笋一起学C++】(五十三)使用指向对象的指针
c++·初始化·指向对象的指针
q***441521 分钟前
Java性能优化实战技术文章大纲Java性能优化的核心目标与原则
java·开发语言·性能优化
csbysj202024 分钟前
Ruby CGI Session
开发语言
lly20240631 分钟前
NumPy 迭代数组
开发语言
rgeshfgreh32 分钟前
Python闭包:函数记住状态的秘密
开发语言·python
古城小栈34 分钟前
Cargo命令工具
开发语言·rust