C++ 中std::promise和std::future基本使用
1.代码示例
# cat promise_future.cpp
#include <iostream>
#include <thread>
#include <future>
#include <chrono>
// 模拟一个异步任务
void asyncTask(std::promise<void>& promiseObj) {
std::cout << "异步任务开始...\n";
// 模拟一些耗时操作
std::this_thread::sleep_for(std::chrono::seconds(3));
std::cout << "异步任务完成!\n";
// 设置 promise 完成状态,通知等待的线程
promiseObj.set_value();
}
int main() {
// 创建 std::promise<void> 对象
std::promise<void> promiseObj;
// 获取与 promise 关联的 future 对象
std::future<void> futureObj = promiseObj.get_future();
// 启动一个新线程,传递 promise 对象
std::thread t(asyncTask, std::ref(promiseObj));
std::cout << "主线程等待异步任务完成...\n";
// 等待异步任务完成(通过 future 等待)
futureObj.wait(); // 阻塞主线程,直到 promise 被设置
std::cout << "主线程收到通知,异步任务已经完成!\n";
// 等待子线程结束
t.join();
return 0;
}
2.编译
#g++ promise_future.cpp
3.测试
# ./a.out
主线程等待异步任务完成...
异步任务开始...
异步任务完成!
主线程收到通知,异步任务已经完成!