qt 线程池
时间: 2023-07-01 21:28:21 浏览: 126
Qt 线程池是一种用于管理多线程任务的工具。它可以在程序中创建一组线程,并将任务分配给这些线程,以实现并发执行任务的效果,从而提高程序的性能和响应速度。
使用 Qt 线程池,需要先创建一个 QThreadPool 对象,并设置最大线程数。然后,将任务封装成 QRunnable 对象,并通过 QThreadPool::start() 函数将任务提交给线程池。线程池会自动管理线程的创建和销毁,以及任务的调度和执行。
下面是一个简单的示例代码,演示了如何使用 Qt 线程池:
```c++
#include <QCoreApplication>
#include <QThreadPool>
#include <QDebug>
class MyTask : public QRunnable
{
public:
MyTask(int id) : m_id(id) {}
void run() override
{
qDebug() << "Task" << m_id << "is running on" << QThread::currentThread();
}
private:
int m_id;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QThreadPool threadPool;
threadPool.setMaxThreadCount(4);
for (int i = 0; i < 10; i++) {
MyTask *task = new MyTask(i);
threadPool.start(task);
}
threadPool.waitForDone();
qDebug() << "All tasks are done.";
return a.exec();
}
```
在这个示例中,我们创建了一个包含 4 个线程的线程池,然后提交了 10 个任务,每个任务都会打印自己的编号和运行线程的编号。最后,我们调用了 QThreadPool::waitForDone() 函数,等待所有任务完成,并输出 "All tasks are done." 消息。
需要注意的是,Qt 线程池只适用于短时间执行的任务,不适合长时间执行的任务。长时间执行的任务需要使用 QThread 或者自定义线程,以避免阻塞线程池。
阅读全文