2010-12-29 8 views
5

qualcuno può, per favore, dirmi che possiamo inoltrare una variabile boost :: thread. boost :: thread t (thread); avvia una discussione, ma voglio dichiararla da qualche parte e avviarla da qualche altra parte. Grazie in anticipo.forward declaration of boost :: thread variable

Quando uso

boost::thread t; 
t=boost::thread (thread); 

/usr/include/boost/noncopyable.hpp: In copy constructor ‘boost::thread::thread(const boost::thread&)’: 
/usr/include/boost/noncopyable.hpp:27: error: ‘boost::noncopyable_::noncopyable::noncopyable(const boost::noncopyable_::noncopyable&)’ is private 
/usr/include/boost/thread/thread.hpp:35: error: within this context 
thr.cpp: In function ‘int main()’: 
thr.cpp:20: note: synthesized method ‘boost::thread::thread(const boost::thread&)’ first required here 
/usr/include/boost/noncopyable.hpp: In member function ‘boost::thread& boost::thread::operator=(const boost::thread&)’: 
/usr/include/boost/noncopyable.hpp:28: error: ‘const boost::noncopyable_::noncopyable& boost::noncopyable_::noncopyable::operator=(const boost::noncopyable_::noncopyable&)’ is private 
/usr/include/boost/thread/thread.hpp:35: error: within this context 
thr.cpp: In function ‘int main()’: 
thr.cpp:20: note: synthesized method ‘boost::thread& boost::thread::operator=(const boost::thread&)’ first required here 

risposta

4

A mia conoscenza, l'unico modo per farlo è quello di utilizzare thread s' move semantics:

boost::thread t; // Will be initialized to `Not-a-Thread`. 

// Later... 
t = boost::thread(your_callable); 
// Now `your_callable()` runs inside a new thread that has been moved to `t`. 

EDIT: Dai messaggi di errore hai postato, sembra che tu non possa usare la semantica del movimento con la tua versione di boost. In questo caso, temo che non sarai in grado di inizializzare un'istanza thread e farlo partire più tardi.

+0

cosa intendi con il tuo callable? in che modo è diverso da tua_funzione (come hai scritto prima di editare) – Shweta

+0

@Shweta, un callable può anche essere un'istanza di una classe il cui 'operator()' è stato sovraccaricato (a volte chiamato [oggetto funzione] (http: // it .wikipedia.org/wiki/Function_object # In_C_and_C.2B.2B)). Ho apportato tale modifica per completezza :) –

+0

scusa non funziona – Shweta