2017-01-23 1 views
0

저는 많은 사람들이이 질문을했지만, "많은 사람들"이 아니라는 것을 알고 있습니다. 이해하기 위해서는 좀 더 다른 설명이 필요합니다.스레드에서 "detach()"는 무엇을합니까? CPP

멤버 함수 "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 초 후에 모든 프로그램을 종료합니다. "분리"에 대한 모든 아이디어가 메인과 독립되어 있기 때문에 프로그램이 195 초 후에 닫히게 될 것이라고 생각했기 때문에 독립적 인 방법으로 분리 된 모든 therades가 종결 될 때까지 계속 실행해야합니다 ... 설명서를 읽고 여기로 왔습니다. 더 나은 설명 - 제발! :)

+0

['std :: async'] (http://en.cppreference.com/w/cpp/thread/async)를 사용하면 편리합니다. –

답변

0

분리 된 스레드는 완료하기 위해 기다릴 수없는 스레드입니다. std::thread 소멸자는 스레드가 분리되거나 결합되었는지 확인하고 아무 것도 발생하지 않으면 프로그램을 중단합니다 (std::terminate).

main()이 종료 된 후에는 프로그램이 무조건 종료되고 스레드가 분리되거나 분리되지 않을 때까지 기다리지 않습니다.

+0

나는 당신을 이해하지 못했습니다 ... 그래서 그것이 필요한 이유?! 예를 들어 파이썬에서는 "detach"가 없으며 프로그램 자체가 중단되지 않습니다! 왜 그것을 사용해야합니까? 나 뭐야? –

+0

@fdwfgwdfwdfv, 어쨌든 당신을 돕지 않는 것. 파이썬을 고수하고 싶을 수도 있습니다. – SergeyA

+0

내가 이해할 수있을 정도로 단지 그것을 더 기술 하여라.. 나는 그 남자에게 그 이상을 묻지 않았다. \ –