2011-11-28 12 views
5

Estoy tratando de tener una clase que cuando creó, se inicia un subproceso de fondo, similar a la de abajo:impulso :: hilo dentro de una clase

class Test 
{ 
    boost::thread thread_; 
    void Process() 
    { 
    ... 
    } 

    public: 
    Test() 
    { 
     thread_ = boost::thread(Process); 
    } 
} 

no puedo que se compile, el error es "Sin función de coincidencia para la llamada a impulsar :: hilo :: hilo (tipo de función no resuelta)". Cuando hago esto fuera de una clase funciona bien. ¿Cómo puedo hacer que funcione el puntero a la función?

Respuesta

6

Debe inicializar thread_ como:

Test() 
    : thread_(<initialization here, see below>) 
{ 
} 

Process es miembro de un método no estático de la clase Test. Puede:

  • declarar Process como estático.
  • vincula una instancia de prueba para llamar al Process.

Si se declara Process como algo estático, el inicializador debe ser sólo

&Test::Process 

De lo contrario, puede enlazar una instancia de Test usando Boost.Bind:

boost::bind(&Test::Process, this) 
0

Haga su método de proceso estático:

static void Process() 
    { 
    ... 
    } 
4

El problema es que desea inicializar impulso :: hilo con un puntero a una función de miembro.

que tendría que:

Test() 
    :thread_(boost::bind(&Test::Process, this)); 
{ 

} 

También este question puede ser muy útil.

Cuestiones relacionadas