2013-03-10 31 views
0

我有一个向量指针的对象,我试图在一个新线程(方法有一个参数)启动对象的方法。在新线程中启动方法

这是代码,我不能编译:

class CanaSynchDynamic { 
... 
    void start() (boost::barrier&); 
... 
}; 

,并在主:

for(int i=0;i<pw;++i) 
    vS1.push_back(new CanaSynchDynamic()); 

do { 
     boost::barrier barrier(pw); 
     boost::thread_group threads; 
     for(int i=0;i<pw;++i) 
      vS1[i]->more_steps(start,s[z]); 
     for(int i=0;i<pw;++i) 
      threads.create_thread(boost::bind(&CanaSynchDynamic::start,boost::ref(*(vS1[i])),boost::ref(barrier))); 
     threads.join_all(); 

} while(something); 

错误是:

/usr/include/boost/thread/detail/thread.hpp: In instantiation of 'void 
    boost::detail::thread_data<boost::reference_wrapper<T> >::run() [with F = CanaSynchDynamic]': 
    simulation_3.cpp:278:1: required from here 
    /usr/include/boost/thread/detail/thread.hpp:98:17: error: no match for call to '(CanaSynchDynamic)()' 

你有什么想法?

回答

2

您不能使用reference_wrapper来传递函数将运行的对象。相反,你可以只是一个指针传递给你的对象:

threads.create_thread(boost::bind(&CanaSynchDynamic::start,vS1[i],boost::ref(barrier))); 

而且,你可能只是存储在一个向量的对象,而不是指向他们。如果您需要指针,请使用C++ 11中的std::unique_ptr,或者如果该指针不可用,则可能使用boost::ptr_vector