C ++线程池并将未来作为参数传递

时间:2016-07-16 13:44:55

标签: c++ multithreading

您好我正在开发线程池实现,我的想法是 例如,使用两个线程池,将输入数据传递给第一个线程池 并返回as future,然后传递给第二个线程池

我正在尝试使用来自的线程池代码 github.com/Tyler-Hardin/thread_pool

代码的核心部分如下

template<typename Ret> 
std::future<Ret> async(std::function<Ret()> f){ 
typedef std::function<Ret()> F; 

std::promise<Ret> *p = new std::promise<Ret>; 

// Create a function to package as a task. 
auto task_wrapper = [p](F&& f){ 
    p->set_value(std::move(f())); 
}; 

// Create a function to package as a future for the user to wait on. 
auto ret_wrapper = [p]() -> Ret{ 
    auto temp = std::move(p->get_future().get()); 

// Clean up resources 
    delete p; 
    return std::move(temp); 
}; 

task_mutex.lock(); 

// Package the task wrapper into a function to execute as a task. 
auto task = std::async(std::launch::deferred,  
    task_wrapper, 
    std::move(f)); 

// Push the task onto the work queue. 
tasks.emplace_back(std::move(task)); 

task_mutex.unlock(); 

// complete and to get the result. 
return std::async(std::launch::deferred,  
ret_wrapper); 
} 

现在我要做的是如下 首先,我有两个处理功能。

int func1(int i1)
{
    // do something
    return i1; 
}

int func2(std::future<int> &i2)
{
   int i3 = i2.get();
   // do something
   return i3;
}

主叫代码如下

int input = 1;
1
std::future<int> ret1 = tpool1->async(std::function<int(int)>func1, input);

2
std::future<int> ret2 = tpool2->async(std::function<int(std::future<int> &)>func2, std::ref(ret1));

问题是1)可以编译成功,2)遇到编译错误  &#34;没有匹配的参数&#34;

我尝试过不同的东西而且都没有用,有人可以帮助我吗?

0 个答案:

没有答案