线程池
QThreadPool
和 QRunnable
是 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)")