← 模式

在线程间传递值

12345678910111213141516171819#include <future> #include <thread> void func(std::promise<int> result_promise) noexcept { result_promise.set_value(42); } int main() { std::promise<int> result_promise; std::future<int> result_future = result_promise.get_future(); std::thread t{func, std::move(result_promise)}; int result = result_future.get(); t.join(); }

此模式采用 CC0 公共领域贡献 许可。

需要 c++11 或更新版本。

意图

使用 promise 在线程间通信值。

描述

第 11 行,我们创建了一个 std::promise,它提供了一种在线程间异步传递对象的机制。在 第 12 行,我们从该 promise 中获取一个 std::future<int>,它代表一个将在未来某个时刻到达的 int 值。然后我们将 promise 移入一个新线程(因为 promise 不可复制)。

第 6 行 的线程函数中,我们将 promise 的值设置为我们希望异步通信回 main 函数的值。

第 16 行,我们调用 future 的 get 函数来尝试获取承诺的返回值。该函数会阻塞,直到有一个值(或一个异常)可用。当值可用时(即当 promise 的值已在 第 6 行 设置),get 函数就会返回该值。

贡献者

  • Joseph Mansfield
  • Mark A. Gibbs

最后更新

2017年12月9日

来源

在 GitHub 上 Fork 此模式

分享