C++ 如何在新的独立线程中从vector运行每个函数?

C++ 如何在新的独立线程中从vector运行每个函数?,c++,multithreading,boost,boost-thread,C++,Multithreading,Boost,Boost Thread,所以我有点像 typedef boost::function<void(DataType)> Function; typedef std::vector<Function> FunctionSequence; typedef typename FunctionSequence::iterator FunctionIterator; DataType* dataElement; FunctionSequence funcs; //...

所以我有点像

typedef boost::function<void(DataType)>   Function;
typedef std::vector<Function>      FunctionSequence;
typedef typename FunctionSequence::iterator FunctionIterator; 


DataType* dataElement;
FunctionSequence funcs; 
    //...
    for (FunctionIterator it(funcs.begin()); it != funcs.end(); ++it){
        DataType dataCopy;
        dataCopy = *dataElement;
        (*it)(dataCopy);
typedef boost::function;
typedef std::向量函数序列;
typedef typename FunctionSequence::迭代器FunctionIterator;
数据类型*数据元素;
函数序列funcs;
//...
for(FunctionIterator it(funcs.begin());it!=funcs.end();++it){
数据类型数据拷贝;
dataCopy=*数据元素;
(*it)(数据拷贝);

如何使用boost.thread使每个向量函数在单独的新线程中运行,或者如果它最好有一个线程向量,这样就不会每次都创建线程?

如果您试图为每个函数启动一个新线程,并传入一个数据类型对象的副本,那么您需要使用和:

#包括
#包括
#包括
boost::线程组tg;
for(FunctionIterator it(funcs.begin());it!=funcs.end();++it)
{
创建线程(boost::bind(*it,*dataElement));
}
加入所有人;
首先,您创建一个
boost::thread_group
,它将作为您启动的所有线程的容器。然后
create_thread
将启动一个新线程并调用传递给它的函数。在这种情况下,我们希望调用的不仅仅是一个简单的函数,因此我们需要使用
boost::bind
来创建一个
vo线程可以运行的id()
函数。对
boost::bind
的调用首先指定要调用的函数,然后指定要传递给该函数的任何参数。它将已经复制参数,因此无需事先创建另一个副本

启动所有线程后,可以调用
tg.join\u all()
等待所有线程完成后再继续。调用
join\u all()
非常重要,可以确保线程不会在后台运行rogue


显然,如果有很多函数要调用,并且不希望创建那么多线程,则必须跟踪未完成线程的数量,并且只在现有线程退出后创建新线程。这将需要在被调用的函数内部进行一些额外的簿记(可能涉及包装函数)。在您的情况下可能不需要它。

不确定您要完成什么。您能提供更多详细信息吗?您是否尝试在同一个DataType实例上执行每个函数?如果是,函数是否会修改DataType的值?谢谢
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>

boost::thread_group tg;

for (FunctionIterator it(funcs.begin()); it != funcs.end(); ++it)
{
    tg.create_thread(boost::bind(*it, *dataElement));
}

tg.join_all();