Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行线程与线程对象之间的关系

运行线程与线程对象之间的关系
EN

Stack Overflow用户
提问于 2017-08-15 19:44:33
回答 1查看 107关注 0票数 2

在学习基本线程管理时,我发现很难从一本书中理解这些行(以粗体表示)。

启动线程后,您需要显式地决定是等待它完成(通过与它连接--参见2.1.2节)还是让它自行运行(通过分离它--参见第2.1.3节)。如果在销毁std::线程对象之前没有做出决定,那么程序就会终止(std::线程析构函数调用std::terminate())。因此,必须确保线程被正确地连接或分离,即使在出现异常的情况下也是如此。有关处理此场景的技术,请参阅2.1.3节。请注意,您只需在std::线程对象被破坏之前做出此决定--线程本身很可能在加入或分离它之前很久就完成了,并且如果您分离它,那么线程可能在std::对象被销毁后很长时间内继续运行。

甚至在线程对象被销毁之后,线程何时运行?有人有样本代码或任何参考吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-15 20:08:31

这意味着线程的生存期与线程对象的生存期无关。

因此,下面的代码:

代码语言:javascript
运行
AI代码解释
复制
#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";
}

将产出:

代码语言:javascript
运行
AI代码解释
复制
thr destroyed, start sleep
Thread stuff
sleep over
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45704779

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档