因为我们可能需要稍等一下,直到 std::future::then
已实现 我目前正在尝试编写一个非常简单的任务包装器,问题是调用回调函数。假设我们有一个类:
template<typename... ARG>
class Task
{
public:
typedef std::function<void(ARG...)> task_func_t;
Task() {}
void then(task_func_t callback) { this->callback_ = callback; }
void finish(ARG... arguments)
{
this->callback_(std::forward<ARG>(arguments)...);
}
void operator()(ARG... arguments)
{
this->callback_(std::forward<ARG>(arguments)...);
}
private:
task_func_t callback_;
};
让我们假设以下用法:
std::shared_ptr<Task<int>> sum(int n1, int n2)
{
auto ptr = std::make_shared<Task<int>>();
myPool.process([n1, n2, ptr]
{
(*ptr.get())(n1 + n2);
}
return ptr;
}
void test()
{
sum(5, 6)->then([](int sum) { std::cout << "Sum is " << sum << std::endl };
}
我有时会遇到在函数实际设置之前调用回调的问题。我知道只要回调无效我就可以检查,但我不太喜欢这个解决方案,那么还有其他智能解决方案吗?我实际上想过这样做:
return task.before(do prepare work);
.then(process result)
那么当链接完成时它会调用创建线程。完美的解决方案是调用 then
以前作为要求,但我认为只要我想要这个设计,它实际上是不可能的。
最佳答案
您可以等待条件变量。使其成为任务类的成员,并在设置函数后向其发出信号。
关于c++ - 创建 Task then 函数(如 std::future.then),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25340083/