提升线程池 [英] boost threadpool
问题描述
我试图创建一个线程池提振库中的线程池,但将其定义我不断收到很多错误的关于模板PARAMS是错误的。
我可能做一些根本性的错误,但我没有看到它?
//线程池
TYPEDEF的boost ::线程池:: thread_pool<
提高::线程池:: task_func,
提高::线程池:: fifo_scheduler< TSK>中
提高::线程池:: static_size<提高::线程池:: fifo_pool>中
提高::线程池:: resize_controller<提高::线程池:: fifo_pool>中
提高::线程池:: wait_for_active_tasks<提高::线程池:: fifo_pool>
>池;
错误:
------启动生成:项目:庭审中,配置:调试的Win32 ------编译...
Trial.cpp
错误C2923:提高::线程池:: fifo_scheduler:啧作为模板参数#1无效,预计类型
看到啧的声明
错误C3200:提高::线程池:: fifo_pool':模板参数'SizePolicy无效的模板参数,预期类模板
错误C3200:提高::线程池:: resize_controller<泳池和GT;' :模板参数'SizePolicyController',无效的模板参数预期类模板
同
[
池=的boost ::线程池:: fifo_pool
]
错误C3200:提高::线程池:: wait_for_active_tasks<泳池和GT;' :模板参数'ShutdownPolicy',无效的模板参数预期类模板
同
[
池=的boost ::线程池:: fifo_pool
]
错误C3200:提高::线程池:: fifo_pool':模板参数'SizePolicy无效的模板参数,预期类模板
见参考文献类模板实例'boost::threadpool::thread_pool<Task,SchedulingPolicy,SizePolicy,SizePolicyController,ShutdownPolicy>'正在编译
同
[
任务=的boost ::线程池:: task_func,
SchedulingPolicy =的boost ::线程池:: fifo_scheduler,
SizePolicy =的boost ::线程池:: fifo_pool,
SizePolicyController =的boost ::线程池:: resize_controller&LT;提高::线程池:: fifo_pool&gt;中
ShutdownPolicy =提高::线程池:: wait_for_active_tasks&LT;提高::线程池:: fifo_pool&GT;
]
C:\\ Program Files文件\\提升\\ boost_1_44 \\提升\\线程池\\ pool.hpp(79):错误C3200:提高::线程池:: resize_controller&LT;泳池和GT;' :模板参数'SizePolicyController',无效的模板参数预期类模板
同
[
池=的boost ::线程池:: fifo_pool
]
C:\\ Program Files文件\\提升\\ boost_1_44 \\提升\\线程池\\ pool.hpp(79):错误C3200:提高::线程池:: wait_for_active_tasks&LT;泳池和GT;' :模板参数'ShutdownPolicy',无效的模板参数预期类模板
同
[
池=的boost ::线程池:: fifo_pool
]
C:\\ Program Files文件\\提升\\ boost_1_44 \\提升\\线程池\\ pool.hpp(91):错误C2059:语法错误:'&LT;'
C:\\ Program Files文件\\提升\\ boost_1_44 \\提升\\线程池\\ pool.hpp(91):错误C2238:意外的标记(S)preceding';'
C:\\ Program Files文件\\提升\\ boost_1_44 \\提升\\线程池\\ pool.hpp(92):错误C2059:语法错误:'&LT;'
C:\\ Program Files文件\\提升\\ boost_1_44 \\提升\\线程池\\ pool.hpp(92):错误C2238:意外的标记(S)preceding';'
C:\\ Program Files文件\\提升\\ boost_1_44 \\提升\\线程池\\ pool.hpp(111):错误C2146:语法错误:缺少;前标识符'size_controller
C:\\ Program Files文件\\提升\\ boost_1_44 \\提升\\线程池\\ pool.hpp(111):错误C2501: 'boost::threadpool::thread_pool<Task,SchedulingPolicy,SizePolicy,SizePolicyController,ShutdownPolicy>::size_controller_type' :缺少存储类或类型说明符
同
[
任务=的boost ::线程池:: task_func,
SchedulingPolicy =的boost ::线程池:: fifo_scheduler,
SizePolicy =的boost ::线程池:: fifo_pool,
SizePolicyController =的boost ::线程池:: resize_controller&LT;提高::线程池:: fifo_pool&gt;中
ShutdownPolicy =提高::线程池:: wait_for_active_tasks&LT;提高::线程池:: fifo_pool&GT;
]
C:\\ Program Files文件\\提升\\ boost_1_44 \\提升\\线程池\\ pool.hpp(112):警告C4183:'size_controller:缺少返回类型;假设一个成员函数返回'廉政'----------------------完成---------------------- 构建:0成功,1失败,0跳过
根据您的意见, TSK
是一个变量。不能传递运行前pressions(诸如可变)作为模板的参数。模板完全编译时间。
对于这个特定的问题,您需要做的仅仅是:
的typedef的boost ::线程池:: thread_pool&LT;&GT;池;
无效taskfunc();// 稍后的...
池MY_POOL;
my_pool.schedule(安培; taskfunc);
的boost ::线程池:: task_func
只是一个的boost :: function0&LT;无效&GT;
&MDASH;任何0-ARG空函数指针可以转换为该类型。
I'm trying to create a threadpool with the boost threadpool library, but on defining it I keep getting lots of error about template params being wrong.
I'm probably doing something fundamentally wrong, but I'm not seeing it?
//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;
ERRORS:
------ 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
According to your comment, tsk
is a variable. You can't pass runtime expressions (such as a variable) as template parameters. Templates are entirely compile-time.
For this specific problem, you just need to do this:
typedef boost::threadpool::thread_pool<> pool;
void taskfunc();
// later on...
pool my_pool;
my_pool.schedule(&taskfunc);
boost::threadpool::task_func
is just a boost::function0<void>
— any 0-arg void function pointer can convert to that type.
这篇关于提升线程池的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!