std::future 用简单的话来说?

Don*_*aka 2 c++ std-future

std::future我在C++编写的程序中看到了 的用法。所以,我很快去查找什么是:std::future,并得到了一个相当复杂的答案。

谁能用简单的话来形容一个6岁的孩子?我的理解力只有6岁孩子的水平……

只需一个小定义和最小的用例就可以为我工作。如果问得太多,请告诉我,我会收回我的问题。

Die*_*ühl 13

Astd::future<T>是尚未计算的工作结果的句柄。您可以将其想象为您要求工作时收到的收据,并且该收据用于取回结果。例如,您可以将自行车带到自行车商店进行修理。您会收到一张收据来取回自行车。当工作正在进行时(正在修理自行车),您可以去做其他事情。最终,当工作应该完成时,您会询问结果(修好的自行车)并[可能]等待结果交付。

std::future<T>是接收结果的通用机制。它没有规定所请求的工作是如何实际执行的。


use*_*522 9

您链接的 cppreference 页面上有一个非常简单的示例。稍作修改:

std::future<int> f = std::async(std::launch::async, []{
    // long calculation
    return /* some result */;
});
/* do some other stuff */
int result = f.get();
Run Code Online (Sandbox Code Playgroud)

std::async使用该std::launch::async标志异步运行一个函数(这里是 lambda)(在另一个线程中)。它返回一个std::future,当该函数完成时,它最终int将包含一个值。

当该函数运行时,我们可以继续 和/* do some other stuff */

当我们需要结果时,我们调用f.get()which 等待直到该int值可用,即直到异步函数完成,然后将其提供给我们。给我们的值f.get()是函数的返回值,它std::async存储在std::future函数返回之后。

相反,它也可以通过或std::async与线程一起使用。std::promisestd::packaged_task