什么时候调用std :: thread析构函数?

米可

我知道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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

什么时候调用C ++析构函数?

什么时候调用constinit对象的析构函数?

可连接std :: thread的析构函数

什么时候在C ++中调用要调用的对象的析构函数?

什么时候可以安全地在构造函数和析构函数中调用this->

如果A有析构函数,std :: unique_ptr <A>什么时候需要特殊的删除器?

析构函数调用

什么时候需要进行显式的析构函数调用?

什么时候在堆中的对象上调用C ++析构函数?

究竟什么时候是析构函数或在调用的线程上终止

我什么时候应该std :: forward函数调用?

从析构函数调用BeginInvoke

什么时候在C ++中确切地调用了一个类的析构函数?

删除从析构函数调用的引发析构函数

从对象原因到此类的调用析构函数的c ++ std :: thread调用方法

std::map 对象析构函数被调用?

thread_local std :: unique_ptr版本未调用析构函数

为什么要调用析构函数

为什么不调用析构函数?

未调用初始化的静态thread_local结构的构造函数和析构函数

什么时候使用()调用函数?

什么时候调用 getSchema 函数?

什么时候应该为我的课堂提供析构函数?

什么时候使用= default将析构函数设为默认值?

QT应用在Android 10设备上的std :: thread的析构函数处崩溃

std :: thread在vc ++中的析构函数中获取中止异常

新的boost :: thread导致对象析构函数的调用次数比预期的次数多?

未调用子类的析构函数

C ++中的析构函数直接调用