2010-10-01 3 views
0

J'essaie de créer un pool de threads avec la bibliothèque boost de pool de threads, mais en le définissant, je continue à avoir beaucoup d'erreurs sur les paramètres de template qui ne sont pas corrects.boost threadpool

Je fais probablement quelque chose de fondamentalement faux, mais je ne le vois pas?

//Threadpool 
typedef boost::threadpool::thread_pool< 
    boost::threadpool::task_func, 
    boost::threadpool::fifo_scheduler<tsk>, 
    boost::threadpool::static_size<boost::threadpool::fifo_pool>, 
    boost::threadpool::resize_controller<boost::threadpool::fifo_pool>, 
    boost::threadpool::wait_for_active_tasks<boost::threadpool::fifo_pool> 
> pool; 

ERREURS:

------ Build started: Project: Trial, Configuration: Debug Win32 ------ 

Compiling... 
Trial.cpp 
error C2923: 'boost::threadpool::fifo_scheduler' : 'tsk' is invalid as template argument '#1', type expected 
     see declaration of 'tsk' 
error C3200: 'boost::threadpool::fifo_pool' : invalid template argument for template parameter 'SizePolicy', expected a class template 
error C3200: 'boost::threadpool::resize_controller<Pool>' : invalid template argument for template parameter 'SizePolicyController', expected a class template 
     with 
     [ 
      Pool=boost::threadpool::fifo_pool 
     ] 
error C3200: 'boost::threadpool::wait_for_active_tasks<Pool>' : invalid template argument for template parameter 'ShutdownPolicy', expected a class template 
     with 
     [ 
      Pool=boost::threadpool::fifo_pool 
     ] 
error C3200: 'boost::threadpool::fifo_pool' : invalid template argument for template parameter 'SizePolicy', expected a class template 
     see reference to class template instantiation 'boost::threadpool::thread_pool<Task,SchedulingPolicy,SizePolicy,SizePolicyController,ShutdownPolicy>' being compiled 
     with 
     [ 
      Task=boost::threadpool::task_func, 
      SchedulingPolicy=boost::threadpool::fifo_scheduler, 
      SizePolicy=boost::threadpool::fifo_pool, 
      SizePolicyController=boost::threadpool::resize_controller<boost::threadpool::fifo_pool>, 
      ShutdownPolicy=boost::threadpool::wait_for_active_tasks<boost::threadpool::fifo_pool> 
     ] 
c:\Program Files\boost\boost_1_44\boost\threadpool\pool.hpp(79) : error C3200: 'boost::threadpool::resize_controller<Pool>' : invalid template argument for template parameter 'SizePolicyController', expected a class template 
     with 
     [ 
      Pool=boost::threadpool::fifo_pool 
     ] 
c:\Program Files\boost\boost_1_44\boost\threadpool\pool.hpp(79) : error C3200: 'boost::threadpool::wait_for_active_tasks<Pool>' : invalid template argument for template parameter 'ShutdownPolicy', expected a class template 
     with 
     [ 
      Pool=boost::threadpool::fifo_pool 
     ] 
c:\Program Files\boost\boost_1_44\boost\threadpool\pool.hpp(91) : error C2059: syntax error : '<' 
c:\Program Files\boost\boost_1_44\boost\threadpool\pool.hpp(91) : error C2238: unexpected token(s) preceding ';' 
c:\Program Files\boost\boost_1_44\boost\threadpool\pool.hpp(92) : error C2059: syntax error : '<' 
c:\Program Files\boost\boost_1_44\boost\threadpool\pool.hpp(92) : error C2238: unexpected token(s) preceding ';' 
c:\Program Files\boost\boost_1_44\boost\threadpool\pool.hpp(111) : error C2146: syntax error : missing ';' before identifier 'size_controller' 
c:\Program Files\boost\boost_1_44\boost\threadpool\pool.hpp(111) : error C2501: 'boost::threadpool::thread_pool<Task,SchedulingPolicy,SizePolicy,SizePolicyController,ShutdownPolicy>::size_controller_type' : missing storage-class or type specifiers 
     with 
     [ 
      Task=boost::threadpool::task_func, 
      SchedulingPolicy=boost::threadpool::fifo_scheduler, 
      SizePolicy=boost::threadpool::fifo_pool, 
      SizePolicyController=boost::threadpool::resize_controller<boost::threadpool::fifo_pool>, 
      ShutdownPolicy=boost::threadpool::wait_for_active_tasks<boost::threadpool::fifo_pool> 
     ] 
c:\Program Files\boost\boost_1_44\boost\threadpool\pool.hpp(112) : warning C4183: 'size_controller': missing return type; assumed to be a member function returning 'int' 

---------------------- Done ---------------------- 

    Build: 0 succeeded, 1 failed, 0 skipped 
+2

"Beaucoup d'erreurs sur les paramètres du template sont faux" n'est pas du tout descriptif. –

+0

A quoi ressemble la déclaration de tsk? – dgnorton

+0

void taskfunc(); boost :: threadpool :: task_func tsk = tâchefunc; //Les tâches –

Répondre

5

Selon votre commentaire, tsk est une variable. Vous ne pouvez pas transmettre d'expressions d'exécution (telles qu'une variable) en tant que paramètres de modèle. Les modèles sont entièrement à la compilation.

Pour ce problème spécifique, il vous suffit de le faire:

typedef boost::threadpool::thread_pool<> pool; 
void taskfunc(); 

// later on... 
pool my_pool; 
my_pool.schedule(&taskfunc); 

boost::threadpool::task_func est juste un boost::function0<void> — tout pointeur de fonction vide 0-arg peut convertir à ce type.

Questions connexes