2012-03-02 1 views
7

나는 매 30 초마다 한 번씩 해고하는 방법을 가지고있다. 나는 실에 있어야합니다.부스트 스레드를 분리하거나 결합 할시기는 언제입니까?

클래스 외부에서 호출 할 수있는 메소드가 있습니다. callThreadedMethod()는 최종 threadedMethod를 호출하는 스레드를 생성하는 것과 같습니다.

그래서 내가 mThread에게 메소드가 호출 될 때마다 분리해야합니까 MyClass에

void callThreadedMethod(){ 
    mThread = boost::shared_ptr<boost::thread>(new boost::thread(&MyClass::threadedMethod, this)); 
} 

void threadedMethod(){ 
    //more code NOT inside a while loop 
} 

의 방법입니까?

MyClass 소멸자에서 join()을 호출하는 것으로 충분합니까?

threadedMethod가 완료되면 스레드가 파괴됩니까?

답변

13

달성하려는 목표에 따라 다릅니다. 언제든지 또는 threadedMethod에 대한 호출이 종료되거나 또는 던져 지는지 여부를 신경 쓰지 않는다면 작성한 즉시 즉시 detach 스레드를 사용할 수 있습니다. 메소드가 완료되면 각 스레드가 파괴됩니다. 그리고 멤버 변수에 스레드를 저장하면 안됩니다.

당신이 신경 쓰는 경우, 생성 한 각 스레드에 join을 호출해야합니다 (따라서 스레드 당 한 번, 소멸자에 한 번 필요하지 않음). 나는 네가 그렇게 생각하지 않는다.

각 통화에 대해 실제로 새 스레드를 만들어야합니까? 스레드 생성은 비용이 많이들 수 있으므로 대안은 스레드 풀을 사용하여 각각 threadedMethod 호출을 제출하는 것입니다. 풀은 MyClass instance의 수명을 가질 수 있습니다. 그러나 아마도 그것은 매 30 초마다 한 번만 일어나고있는 것에 대한 과잉이라고 할 수 있습니다.