我正在尝试在c ++中执行线程池设计模式,但是我一直坚持传递任务函数参数以便将其推入列表中 这是我的代码
std::list<std::function<void(int)>> work_queue;
我的推送功能
void pushTask(std::function<void(int)> func , int a)
{
std::unique_lock<std::mutex> lck(wq_mutex);
work_queue.push_back(std::function<void(int)>(func),a));
}
这是任务functin的主要功能
void calcul(int a){
std::cout << a << "\n";
}
int main(){
ThreadPool th(10);
th.pushTask(std::bind(&calcule,4));
return 0;
}
我在此行出现错误
work_queue.push_back(std::function<void(int)>(func),a));
任何人都可以识别问题吗?
答案 0 :(得分:0)
您做错了。
std::list<std::function<void()>> work_queue; // you do not need int here
void pushTask(std::function<void()> func) // so here it is also obsolete
{
std::unique_lock<std::mutex> lck(wq_mutex);
work_queue.push_back(std::move(func));
}
// now this will be ok
th.pushTask(std::bind(&calcule,4));
// but since this is C++11 lambda is preferred
th.pushTask([]() { calcule(4); } );