2012-03-02 8 views
7

Ho un metodo che viene attivato una volta ogni 30 secondi circa. che ho bisogno di avere in una discussione.quando staccare o unire un filo di boost?

Ho un metodo che posso chiamare dall'esterno della classe. Qualcosa come callThreadedMethod() che crea il thread che a sua volta chiama il threadedMethod finale.

Questi sono metodi di MyClass

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

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

Quindi devo staccare mThread ogni volta che il metodo viene chiamato?

E 'sufficiente chiamare join() nel distruttore MyClass?

Il thread si distrugge automaticamente al termine di threadedMethod?

risposta

13

Dipende da ciò che si desidera ottenere. Se non ti interessa quando o se le chiamate a threadedMethod terminano, o se si buttano o no, allora puoi semplicemente detach il thread non appena lo hai creato; ogni thread verrà distrutto al termine del metodo. E non dovresti memorizzare il thread in una variabile membro.

Se si cura, è necessario chiamare join su ogni thread creato (quindi una volta per thread, non una sola volta nel distruttore). Sospetto che tu non lo sappia.

Hai davvero bisogno di creare un nuovo thread per ogni chiamata? La creazione di thread può essere costosa, quindi un'alternativa sarebbe utilizzare un pool di thread e inviare ogni chiamata a threadedMethod. Il pool potrebbe quindi avere la durata della MyClass instance. Ma forse è eccessivo per qualcosa che accade solo una volta ogni 30 anni.

Problemi correlati