2016-07-14 3 views
1

Я посмотрел на фрактальный пример, включенный в поточные строительные блоки (fractal.cpp), и придумал эту конструкцию. Как ни странно - это работает, если я передаю только 2 аргумента в функции. Если я увеличу его до трех параметров, это не скомпилируется. Я подозреваю, что он тоже потерпит неудачу в оригинальном случае, но это не так. Почему он не сбой только с двумя параметрами? Или как мне заставить его работать с 3 параметрами?std :: thread with tbb - строит с двумя или меньшими аргументами

#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 функций аргумента (см Т/Compat/нити header), его не VARIADIC, как C++ 11-х std::thread