2012-03-02 16 views
7

Mam metodę, która jest uruchamiana raz na 30 sekund. które muszę mieć w wątku.Kiedy odłączyć lub dołączyć do wątku doładowania?

Mam metodę, którą mogę wywołać spoza klasy. Coś jak callThreadedMethod(), który tworzy wątek, który sam wywołuje ostatni threadedMethod.

Są to metody MojaKlasa

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

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

Więc muszę odłączyć mThread każdym razem, gdy wywoływana jest metoda?

Czy wystarczy wywołać metodę join() w destruktorze MyClass?

Czy wątek niszczy się po zakończeniu gwintowania? Metoda kończy się?

Odpowiedz

13

Zależy od tego, co chcesz osiągnąć. Jeśli nie obchodzi cię, kiedy i czy połączenia z threadedMethod zakończą się, czy też nie, to możesz tylko detach wątek, gdy tylko go utworzysz; każdy wątek zostanie zniszczony po zakończeniu metody. Nie należy przechowywać nici w zmiennej członkowskiej.

Jeśli masz na to ochotę, musisz zadzwonić pod numer join na każdym utworzonym wątku (a więc raz na wątek, nie raz w destruktorze). Podejrzewam, że nie.

Czy naprawdę trzeba utworzyć nowy wątek dla każdego połączenia? Tworzenie wątków może być kosztowne, więc alternatywą byłoby użycie puli wątków i przesłanie do nich każdej inwokacji threadedMethod. Pula może wtedy mieć żywotność MyClass instance. Ale może to przesada dla czegoś, co dzieje się tylko raz na 30.

Powiązane problemy