C++ 将函数放入模板
我找到了一个线程池类,并尝试了多种组合来调用包含函数的方法 以下是我的尝试示例:C++ 将函数放入模板,c++,class,templates,C++,Class,Templates,我找到了一个线程池类,并尝试了多种组合来调用包含函数的方法 以下是我的尝试示例: WorkerPool wp(4); wp.run_task<Connection::On_NET1_LOGIN>(&On_NET1_LOGIN()); WorkerPool可湿性粉剂(4); wp.run_任务(&On_NET1_LOGIN()); 以下是WorkerPool的功能: template < typename Task > void run_task( Tas
WorkerPool wp(4);
wp.run_task<Connection::On_NET1_LOGIN>(&On_NET1_LOGIN());
WorkerPool可湿性粉剂(4);
wp.run_任务(&On_NET1_LOGIN());
以下是WorkerPool的功能:
template < typename Task >
void run_task( Task task )
{
boost::unique_lock< boost::mutex > lock( mutex_ );
// If no threads are available, then return.
if ( 0 == available_ ) return;
// Decrement count, indicating thread is no longer available.
--available_;
// Post a wrapped task into the queue.
io_service_.post( boost::bind( &WorkerPool::wrap_task, this,
boost::function< void() >( task ) ) );
}
private:
/// @brief Wrap a task so that the available count can be increased once
/// the user provided task has completed.
void wrap_task( boost::function< void() > task )
{
// Run the user supplied task.
try
{
task();
}
// Suppress all exceptions.
catch ( ... ) {}
// Task has finished, so increment count of available threads.
boost::unique_lock< boost::mutex > lock( mutex_ );
++available_;
}
模板
无效运行任务(任务任务)
{
boost::unique_locklock(互斥锁);
//如果没有可用的线程,则返回。
如果(0==可用),返回;
//递减计数,表示线程不再可用。
--可用的;
//将包装好的任务发布到队列中。
io_服务uu.post(boost::bind(&WorkerPool::wrap_任务,这个,
boost::function(task));
}
私人:
///@brief包装任务,使可用计数增加一次
///用户提供的任务已完成。
void wrap_任务(boost::function任务)
{
//运行用户提供的任务。
尝试
{
任务();
}
//抑制所有异常。
捕获(…){}
//任务已完成,因此增加可用线程的计数。
boost::unique_locklock(互斥锁);
++可用的;
}
在调用该线程池的函数时,我做错了什么?
谢谢。您正在尝试添加以下任务:
wp.run_task<Connection::On_NET1_LOGIN>(&On_NET1_LOGIN());
注意:由于登录时的
似乎是连接的一个成员函数
,因此除非该函数是静态的
,否则该函数将不起作用。如果不是这样,则需要一个连接
实例来调用函数,并且需要发送一个函数对象来执行此操作。可以使用lambda或std::bind解决此问题
错误消息是什么?
wp.run_task(&Connection::On_NET1_LOGIN);