c++ - uso - ¿Cómo pasar un argumento para impulsar:: hilo?
tutorial de funciones en c++ (3)
El siguiente código boost::bind( &clientTCP::run , this )
define una función callback. Se llama a la función de run
en la instancia actual ( this
). Con boost :: bind puedes hacer lo siguiente:
// Pass pMyParameter through to the run() function
boost::bind(&clientTCP::run, this, pMyParameter)
Vea la documentación y el ejemplo aquí:
http://www.boost.org/doc/libs/1_46_1/doc/html/thread/thread_management.html
Si desea construir una instancia de boost :: thread con una función u objeto que se pueda llamar que requiera que se proporcionen argumentos, esto se puede hacer pasando argumentos adicionales al constructor boost :: thread:
void find_the_question(int the_answer);
boost::thread deep_thought_2(find_the_question,42);
Espero que ayude.
thread_ = boost::thread( boost::function< void (void)>( boost::bind( &clientTCP::run , this ) ) );
¿Es posible que run tenga un argumento como este?
void clientTCP::run(boost:function<void(std::string)> func);
y en caso afirmativo, cómo se debe escribir mi llamada boost :: thread
Gracias.
Solo quería señalar, para futuros trabajos, que Boost por defecto pasa los argumentos por valor. Entonces, si desea pasar una referencia, tiene los métodos boost::ref()
y boost::cref()
, el último para referencias constantes.
Creo que aún puedes usar el operador &
para referenciar, pero no estoy seguro, siempre he usado boost::ref
.
thread_ = boost::thread( boost::function< void (void)>( boost::bind( &clientTCP::run , this ) ) );
La bind
y la function
son innecesarias, hacen que el código sea más lento y utilizan más memoria. Solo haz:
thread_ = boost::thread( &clientTCP::run , this );
Para agregar un argumento solo agrega un argumento:
thread_ = boost::thread( &clientTCP::run , this, f );