2008-09-30 9 views

Respuesta

0

Quizás quieras emitir una señal?

Me gustó mucho la funcionalidad de las señales y las ranuras de Qt, y sé que Boost también tiene señales/ranuras. Sin embargo, nunca he usado señales/ranuras en Boost.

+0

El único problema es que es posible que esto no funcione de manera asíncrona, y si lo hace, probablemente necesite un bucle de eventos configurado para "enviar" la señal al bucle. De lo contrario, volverás a solo arrojarlo a un hilo y olvidarte de él. –

3

Bueno, puedes girar un hilo y no volver a unirte a él. Algo así como:

boost::thread some_thread(&SomeFunction, param1, param2); 

Una vez que la variable some_thread sale del ámbito, el hilo de ejecución será separada y no será capaz de unirse de nuevo. Es un desperdicio hacer girar un hilo a menos que el tiempo de procesamiento de esta función sea significativo.

3

No he utilizado impulso :: hilo en cuando pero veo un ejemplo rápido en la documentation page for the class:

void find_the_question(int the_answer); 

boost::thread deep_thought_2(find_the_question,42); 

Creo que tan pronto como se termina la función, el hilo se cerrará. Esto puede no ser lo que quieres porque una vez que el hilo sale del alcance, será destruido. Si eso no va a funcionar, probablemente necesite crear un grupo de subprocesos de ejecución larga y luego pasar sus funtores como composiciones boost :: bind.

1

Dependiendo de la frecuencia con la que lo haga, es mejor que cree un conjunto de hilos, junto con una cola de trabajos. Crear un hilo puede generar muchos sobrecargas si intenta hacerlo docenas de veces por segundo. Si no le importa el valor de retorno, eso lo hace realmente fácil.

Gire un hilo o dos (o diez); tener una cola segura de subprocesos de funtores para llamar (vincular los parámetros a la función y ponerlos en la cola); los hilos esperan en la cola para que aparezca algo, el primer hilo que se despierta pasa a procesar el trabajo. Cuando un hilo termina de ejecutar un trabajo, espera nuevamente en la cola.

Eche un vistazo a this project para tener una idea de una forma de hacerlo.

Por supuesto, si solo hace llamadas asincrónicas cada dos segundos para mejorar la capacidad de respuesta de una UI, sería más fácil simplemente iniciar un nuevo hilo cada vez.

Cuestiones relacionadas