2012-05-10 18 views
10

Creo un hilo en una función, y en otra función, quiero detener este hilo. me han tratado de esta manera:Cómo detener/interrumpir un boost :: thread?

class Server 
{ 
private: 
    boost::thread* mPtrThread; 
... 

public: 
    void createNewThread() 
    { 
     boost::thread t(...); 
     mPtrThread = &t; 
    } 


    void stopThread() 
    { 
     mPtrThread->interrupt(); 
    } 
} 

Pero no es work.How podría detener el hilo?

Respuesta

20

Si desea utilizar interrupt() debe definir interruption points. El hilo se interrumpirá después de llamar a la interrupción() tan pronto como llegue a uno de los puntos de interrupción.

+0

¡Muchas gracias! – wtm

17

En primer lugar, en createNewThread() se declara una boost::thread t en un ámbito localy asignar su puntero al miembro de la clase mPtrThread. Después de que createNewThread() finalice, se destruye t y mPtrThread contendrá un puntero ilegal.

Prefiero usar algo como mPtrThread = new boost::thread(...);

También le recomendamos leer this article para obtener más información sobre el multihilo en Boost.

+1

Artículo muy bueno, ayuda mucho. Gracias ~ – wtm

+0

También debes usar un puntero inteligente para asegurarte de que el thread :: boost se elimine. – allyourcode