qt线程池 多线程使用
时间: 2023-10-21 12:12:29 浏览: 122
Qt的线程池可以通过QThreadPool类来实现。下面是一个简单的多线程使用示例:
```cpp
#include <QCoreApplication>
#include <QDebug>
#include <QThreadPool>
#include <QRunnable>
class Worker : public QRunnable
{
public:
void run() override
{
qDebug() << "Worker thread:" << QThread::currentThreadId();
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QThreadPool pool;
pool.setMaxThreadCount(2); // 设置线程池最大线程数为2
for (int i = 0; i < 5; ++i)
{
Worker *worker = new Worker;
pool.start(worker); // 启动任务
}
pool.waitForDone(); // 等待所有任务完成
return a.exec();
}
```
在上面的示例中,我们定义了一个`Worker`类,继承自`QRunnable`类,重写了`run()`函数,用于执行任务。在`main()`函数中,我们创建了一个`QThreadPool`对象,并设置了最大线程数为2。然后,我们创建了5个`Worker`对象,并通过线程池的`start()`函数启动任务。最后,我们调用`waitForDone()`函数等待所有任务完成。
注意:在多线程编程中,需要注意线程安全问题,尤其是对临界区的访问。此外,线程池中的任务执行顺序是不确定的,不能保证先启动的任务先执行完毕。如果需要控制任务的执行顺序,可以考虑使用信号槽机制或其他同步机制。
阅读全文