在我的代码中,我想创建一个类的一堆对象,然后给每个对象一个单独的线程,这样对象就可以同时执行操作。
for (i = 0; i < ROBOTCOUNT; i++)
{
Robot* r = new Robot;
boost::thread t(r);
robotList.push_back(r);
}
我想做类似上面代码的事情。如果是这样,代码不会编译,但这是我想要的一般想法。有谁知道如何做我想做的事?
谢谢
在我的代码中,我想创建一个类的一堆对象,然后给每个对象一个单独的线程,这样对象就可以同时执行操作。
for (i = 0; i < ROBOTCOUNT; i++)
{
Robot* r = new Robot;
boost::thread t(r);
robotList.push_back(r);
}
我想做类似上面代码的事情。如果是这样,代码不会编译,但这是我想要的一般想法。有谁知道如何做我想做的事?
谢谢
以下代码应在 C++11Worker::foo()
中工作并并行执行多个 s:
#include <thread>
#include <memory>
#include <vector>
struct Worker
{
void foo();
};
int main()
{
std::vector<std::unique_ptr<Worker>> workers;
std::vector<std::thread> threads;
workers.reserve(N);
threads.reserve(N);
for (unsigned int i = 0; i != N; ++i)
{
workers.emplace_back(new Worker);
threads.emplace_back(&Worker::foo, workers.back().get());
}
// ... later ...
for (auto & t : threads) { t.join(); }
}
如果您相信您的元素引用保持有效,您甚至可以不使用唯一指针:
std::deque<Worker> workers;
// ...
for (unsigned int i = 0; i != N; ++i)
{
workers.emplace_back(); // pray this doesn't invalidate
threads.emplace_back(&Worker::foo, std::ref(workers.back()));
}