直接给代码:
#include <future>
#include <iostream>
#include <thread>
void workerFunction(std::promise<bool>& pro) {
// 设置 promise 的值为 true
pro.set_value(true);
}
int main() {
std::promise<bool> pro_page;
std::future<bool> fu_page = pro_page.get_future();
// 创建一个线程,并将 promise 的引用传递给它
std::thread workerThread(workerFunction, std::ref(pro_page));
// 在这里,主线程可以继续执行其他任务...
// 等待子线程设置 promise 的值
bool result = fu_page.get();
std::cout << "Result of promise: " << result << std::endl;
// 等待子线程结束
workerThread.join();
return 0;
}
一些坑和技巧:
1、promise不能通过set_value初始化,一旦用了set_value就会与子线程中的set冲突,所以不能用来进行修改前后值的判断
2、ref用于线程函数传引用,也可以线程函数不接收引用,改用move传入。因为主线程的promise已经用不上。
3、future的get()先等待子线程阻塞,再接受子线程设定的值