macchina.io中线程池的使用方法,举个靠谱的例子
时间: 2024-03-09 19:50:57 浏览: 19
下面是一个在macchina.io中使用线程池的靠谱例子,它使用线程池来并发处理一系列任务:
```c++
#include "Poco/ThreadPool.h"
#include <iostream>
#include <vector>
class Task {
public:
Task(int id) : _id(id) {}
void run() {
std::cout << "Task " << _id << " started on thread " << Poco::Thread::current()->name() << std::endl;
// 模拟任务执行
Poco::Thread::sleep(rand() % 2000 + 1000);
std::cout << "Task " << _id << " completed" << std::endl;
}
private:
int _id;
};
int main()
{
int numThreads = 4;
Poco::ThreadPool threadPool(numThreads);
// 创建一些任务
std::vector<Task*> tasks;
for(int i = 0; i < 10; i++) {
tasks.push_back(new Task(i));
}
// 将任务提交给线程池
for(auto task : tasks) {
threadPool.start(new Poco::RunnableAdapter<Task>(*task, &Task::run));
}
// 等待所有任务完成
threadPool.joinAll();
// 释放任务对象的内存
for(auto task : tasks) {
delete task;
}
return 0;
}
```
在这个例子中,我们创建了一个拥有4个线程的线程池,并创建了10个任务。每个任务是一个Task类的实例,它包含一个`run()`方法用于执行任务。任务执行时会随机休眠一段时间以模拟实际的计算密集型工作。
在将任务提交给线程池时,我们使用了`Poco::RunnableAdapter`类来适配Task类的`run()`方法,以便它可以被线程池调用。最后,我们调用`joinAll()`方法来等待所有任务完成,并释放任务对象的内存。
需要注意的是,在实际应用中,我们需要根据任务的特点和系统资源的限制来调整线程池的大小,以达到最佳的性能和资源利用率。