帮我用qt写个多线程的事例,最好是用线程池的方法
时间: 2024-05-08 21:15:25 浏览: 77
以下是一个使用Qt线程池的多线程示例:
```cpp
#include <QtCore/QCoreApplication>
#include <QtConcurrent/QtConcurrent>
#include <iostream>
#include <vector>
void process(int i)
{
std::cout << "Processing item " << i << " on thread " << QThread::currentThreadId() << std::endl;
QThread::msleep(500);
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// Create a vector of items to process
std::vector<int> items;
for (int i = 1; i <= 10; i++) {
items.push_back(i);
}
// Create a thread pool with 4 threads
QThreadPool pool;
pool.setMaxThreadCount(4);
// Start processing items in the thread pool
QFuture<void> future = QtConcurrent::map(items, [](int i) {
process(i);
});
// Wait for all items to finish processing
future.waitForFinished();
std::cout << "All items processed" << std::endl;
return a.exec();
}
```
在这个示例中,我们首先创建一个包含10个项目的向量。然后,我们创建一个线程池,该线程池限制线程数为4。接下来,我们使用QtConcurrent::map函数在线程池中启动任务,该任务对每个项目调用process函数。最后,我们等待所有项目完成处理,并打印一条消息表明所有项目已处理。注意,我们使用QThread::msleep函数在process函数中模拟处理项目所需的时间。
阅读全文