在学习基本的线程管理时,我发现很难从书中理解这些行(粗体)。
一旦你开始你的线程,你需要明确决定是否 等待它完成(通过加入它 - 参见第2.1.2节)或 让它独立运行(通过拆卸 - 见2.1.3节)。如果你 在std :: thread对象被销毁之前不要决定你的 程序终止(std :: thread析构函数调用 的std ::结束())。因此,你必须确保 线程正确连接或分离,即使存在 例外。有关处理此方案的技术,请参阅第2.1.3节。 请注意,您只需在std :: thread之前做出此决定 对象被破坏 - 线程本身可能已经完成了很长时间 在你加入它或分离之前,如果你分开它,那么 在std :: thread对象之后,线程可能会继续运行很长时间 破坏。
线程对象被销毁后,线程何时运行?任何人都有示例代码或任何参考?
答案 0 :(得分:3)
这意味着线程的生命周期与线程对象的生命周期无关。
以下代码:
#include <thread>
#include <iostream>
int main() {
{ //scope the thread object
std::thread thr = std::thread([]() {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "Thread stuff\r\n";
});
thr.detach();
} //thr is destroyed here
std::cout << "thr destroyed, start sleep\r\n";
std::this_thread::sleep_for(std::chrono::seconds(10));
std::cout << "sleep over\r\n";
}
将输出:
thr destroyed, start sleep
Thread stuff
sleep over