如何在C ++中传递<std :: function <void(int)>>参数

时间:2018-11-18 20:40:18

标签: c++ multithreading std-function

我正在尝试在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));

任何人都可以识别问题吗?

1 个答案:

答案 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); } );