什么" detach()"在线程吗? CPP

时间:2017-01-23 22:01:53

标签: c++

我知道很多人都会问这个问题,但我不是很多人"我需要一个不同的,更好的解释来理解。

成员函数" detach()"到底是做什么的? 我尝试运行下一个代码示例:

#include <iostream>
#include <chrono>
#include <thread>

void independentThread()
{
    std::cout << "Starting concurrent thread.\n";
    std::this_thread::sleep_for(std::chrono::seconds(200));
    std::cout << "Exiting concurrent thread.\n";
}

void threadCaller()
{
    std::cout << "Starting thread caller.\n";
    std::thread t(independentThread);
    t.detach();
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::cout << "Exiting thread caller.\n";
}

int main()
{
    threadCaller();
    std::this_thread::sleep_for(std::chrono::seconds(5));
}

5秒后所有程序关闭。 我认为该程序将在&#34; main&#34;之后的另外195秒打开。关闭,因为&#34;分离&#34;的所有想法这是独立的主要,所以在独立的方式,它应该仍然运行,直到所有分离的therades终止... 我阅读了文档并来到了这里。 更好的解释 - 请! :)

1 个答案:

答案 0 :(得分:0)

分离线程是一个你不能等待完成的线程。 std::thread析构函数将检查线程是分离还是连接,如果两者都没有发生,将中止程序(调用std::terminate)。

main()终止后,程序也无条件终止,不等待任何线程,分离或其他。