代码之家  ›  专栏  ›  技术社区  ›  Tony The Lion

增强线程池

  •  0
  • Tony The Lion  · 技术社区  · 15 年前

    我可能做错了什么,但我没看到?

    //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;
    

    错误:

    ------ 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
    
    1 回复  |  直到 15 年前
        1
  •  5
  •   Steve M    15 年前

    根据你的评论, tsk 是一个变量。不能将运行时表达式(如变量)作为模板参数传递。模板完全是编译时的。

    typedef boost::threadpool::thread_pool<> pool;
    void taskfunc();
    
    // later on...
    pool my_pool;
    my_pool.schedule(&taskfunc);
    

    boost::threadpool::task_func 只是一个 boost::function0<void>