【发布时间】:2017-12-29 02:15:35
【问题描述】:
这个问题之前已经被问过,如果我没记错的话,读取未来结果的唯一方法是调用 get() 并阻塞直到它准备好或使用 wait_for() 持续时间为零,如中所述答案——Get the status of a std::future
但是,如果我只想让工作线程返回一个我希望它计算的结果,而不是等待或阻止自己完成,我可以不只是传递一个回调,工作线程可以在它调用时调用它吗?已经为我计算了结果?像下面这样 -
#include <iostream>
#include <thread>
#include <functional>
void foo(std::function<void(int)> callback)
{
int result = 5;
callback(result);
}
int main()
{
int result = 0;
std::thread worker(foo, [](int result)
{
std::cout << "Result from worker is " << result << std::endl;
});
worker.join();
}
在这里,工作线程会在为我计算结果后执行回调。我不必等待它完成或阻塞或检查循环以知道它何时准备就绪。 请建议这是一个很好的方法,因为目前没有办法在不阻塞或循环检查的情况下做到这一点?
【问题讨论】:
标签: multithreading c++11 future