2012-03-02 11 views
7

Tengo un método que se dispara una vez cada 30 segundos aprox. que necesito tener en un hilo.cuándo separar o unir un hilo de refuerzo?

Tengo un método al que puedo llamar desde fuera de la clase. Algo así como callThreadedMethod() que crea el hilo que a su vez llama al método threadedMethod final.

Éstos son los métodos de MiClase

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

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

Así que tengo que separar mThread cada vez que el método se llama?

¿Es suficiente llamar a join() en el destructor MyClass?

¿El hilo se destruye a sí mismo cuando termina el método threadedMethod?

Respuesta

13

Depende de lo que desee lograr. Si no le importa cuándo o si las llamadas al threadedMethod finalizan, o si se lanzan o no, entonces puede simplemente detach el hilo tan pronto como lo haya creado; cada hilo se destruirá cuando el método se complete. Y no debe almacenar el hilo en una variable miembro.

Si te importa, debes llamar al join en cada hilo que crees (así que una vez por hilo, no una vez en el destructor). Sospecho que no.

¿Realmente necesita crear un nuevo hilo para cada llamada? La creación de subprocesos puede ser costosa, por lo que una alternativa sería usar un grupo de subprocesos y enviar cada invocación threadedMethod a eso. El grupo podría tener la vida útil de MyClass instance. Pero quizás eso sea excesivo para algo que solo ocurre una vez cada 30 s.

Cuestiones relacionadas