我知道std::thread
析构函数是在主出口或线程对象超出范围时调用的。
但是,当它所调用的函数完成执行时,它是否还会销毁?
如果不是这样的线程会发生什么,我还join()
可以吗?
但是,当它所调用的函数完成执行时,它是否还会销毁?如果不是这样的线程会发生什么,我还
join()
可以吗?
不,它不会被破坏,但会被标记joinable()
。所以是的,您仍然join()
可以。
否则,从您的问题的标题(“何时调用std :: thread析构函数?”)以及您在帖子中所说的内容开始
我知道在主出口或线程对象超出作用域时调用std :: thread析构函数。
就像任何其他实例一样:析构函数在实例超出范围时delete
被调用,或者在实例被动态分配的情况下被调用。
这是一个小的示例代码
#include <thread>
#include <iostream>
#include <chrono>
using namespace std::chrono_literals;
void foo() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
std::thread t(foo);
std::this_thread::sleep_for(1s);
std::cout << "t.joinable() is " << t.joinable() << std::endl;
t.join();
}
输出是
Hello from thread! t.joinable() is 1
现场观看。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句