2011-11-28 12 views
5

Sto cercando di avere una classe che, quando ha creato, si avvia un thread in background, simile a quello qui sotto:boost :: thread all'interno di una classe

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

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

io non riesco a farlo per compilare, l'errore è "Nessuna funzione corrispondente per la chiamata a boost :: thread :: thread (tipo di funzione non risolto)". Quando lo faccio al di fuori di una classe funziona perfettamente. Come posso far funzionare il puntatore della funzione?

risposta

6

Si dovrebbe inizializzare thread_ come:

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

Process è un metodo membro non statico della classe Test. È possibile:

  • dichiarare Process come statico.
  • associare un'istanza di Test per chiamare Process su.

Se si dichiara Process come statica, l'inizializzatore dovrebbe essere solo

&Test::Process 

In caso contrario, è possibile associare un'istanza di Test usando Boost.Bind:

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

Fai il tuo metodo di processo statico:

static void Process() 
    { 
    ... 
    } 
4

Il problema è che si desidera inizializzare boost :: thread con un puntatore a una funzione membro.

si avrebbe bisogno:

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

} 

Anche questa question può essere molto utile.

Problemi correlati