我知道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();
}
Run Code Online (Sandbox Code Playgroud)
输出是
Run Code Online (Sandbox Code Playgroud)Hello from thread! t.joinable() is 1
现场观看。
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |