作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
具有这样简单的代码:
void func(std::promise<int>* p) {
int a = 10, b = 5;
int result = a + b;
std::cout << "From inside the Thread...." << std::endl;
p->set_value(result);
}
int FP_main() {
std::promise<int> p;
std::future<int> f = p.get_future();
std::thread th(func, &p);
int ret = f.get();
std::cout << "returned val: " << ret << std::endl;
th.join();
return 0;
}
如果仅在上面两行有
join
调用,为什么我们需要
get
函数调用?
get
函数不是在等待线程完成吗?
最佳答案
因为线程不是 promise 。
promise 已完成,但线程尚未完成。
p->set_value(result);
// ...
// HERE
// ...
}
那是
func
的最后几行。现在,该线程将进行清理,调用析构函数等。当然,在“HERE”中,线程可能还要进行大量其他工作-您可以在此处编写一个1小时的任务来保持线程的 Activity 状态,而这与 promise 无关。
int FP_main() {
//...
std::thread th(func, &p);
//...
th.join();
return 0;
}
“th”是局部变量。当main()返回时,
th
的析构函数将被调用。当相关线程未完成且未加入时,该析构函数将引发异常。
关于c++ - 等待线程完成以及将来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63791115/
我是一名优秀的程序员,十分优秀!