如何在 C++ 中传递 <std::function<void(int)>> 参数
how to pass <std::function<void(int)>> paramater in c++
我正在尝试在 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));
}
这是我的主要功能和任务功能
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));
谁能找出问题所在?
你做错了。
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); } );
我正在尝试在 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));
}
这是我的主要功能和任务功能
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));
谁能找出问题所在?
你做错了。
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); } );