2016-07-14 24 views
1

我查看了线程构建块(fractal.cpp)中包含的分形示例,并提出了此构造。奇怪 - 如果我只在函数中传递2个参数,这是有效的。如果我将它增加到三个参数,则无法编译。我怀疑它在最初的情况下也会失败 - 但事实并非如此。为什么它只有2个参数失败呢?或者我如何让它使用3个参数?std ::具有tbb的线程 - 具有2个或更少参数的构建

#include <iostream> 
    #include <ctime> 
    #include <cstdlib> 
    #include <vector> 
    #include <tbb/compat/thread> 

    void tt(int, int); //, int) ;//fails if 3rd int added 

    int main(int argc, char** argv) { 

     int numthreads = 4 ; 
     int inta = 0 ; 
     int intb = 1 ; 

     std::vector <std::thread *> mythreads(numthreads) ; 

     int ic ; 
     for (ic = 0; ic < numthreads-1 ; ++ic) 
     { 
      mythreads[ic] = new std::thread(tt,ic, inta) ; // , intb) ; 
     } 

     tt(ic, inta) ; //, intb) ; 

     for (int ic = 0 ; ic < numthreads-1 ; ++ic) 
      mythreads[ic]->join() ; 

     std::cout << "all done" << std::endl ; 
    } 
    void tt(int myid, int intb) // , int intc) 
    { 
     std::cout << "entry " << myid << std::endl ; 
    }' 

回答

0

由于std::thread从TBB构造只具有用于0,1和2参数的函数的构造(参见TBB/COMPAT /线程header),它不是像可变参数C++ 11的std::thread