C++ promise和future
C++ 中的 std::promise 和 std::future 用于实现线程间的异步通信。promise 负责“写入/提供”结果,而 future 负责在未来“读取/获取”该结果。两者通过共享状态相连,支持跨线程传递值或异常。
#include <iostream> #include <future> #include <thread> int main(int argc, char** argv) { std::promise<int32_t> prom; std::future<int32_t> fut = prom.get_future(); std::thread thd([&prom]() { std::this_thread::sleep_for(std::chrono::milliseconds(200)); prom.set_value(0); }); thd.detach(); const auto status = fut.wait_for(std::chrono::milliseconds(500)); if (status == std::future_status::timeout) { std::cout << "wait timeout\n"; } else if (status == std::future_status::ready) { std::cout << "receive value:" << fut.get() << "\n"; } return 0; }
如上面的示例代码,如果异步线程执行时间太久没有通过 promise 写入结果,通过 future 等待后就会得到超时状态;如果异步线程在超时时间内通过 promise 返回结果,那么通过 future 就能得到 promise 写入的结果。