Estoy escribiendo una aplicación que bloquea en las aportaciones de dos istreams
.Matar a un Boost bloqueado :: Tema
La lectura de istream
es una llamada síncrona (de bloqueo), así que decidí crear dos Boost::thread
para realizar la lectura.
Cualquiera de estos hilos puede llegar al "fin" (basado en alguna entrada recibida), y una vez que se alcanza el "fin", ambos flujos de entrada dejar de recibir. Lamentablemente, no puedo saber cuál será el motivo.
Por lo tanto, no puedo join()
en ambos hilos, porque solo un hilo (no se puede predeterminar cuál) realmente devolverá (desbloqueará).
que de alguna manera debe forzar al otro a salir, pero es detenido a la espera de la entrada, por lo que no puede decidir por sí mismo es el momento de volver variables de condición (o lo que sea).
Es su manera a cualquiera:
- enviar una señal de un impulso :: hilo, o
- forzar una
istream
a "quebrar", o - matar a un impulso :: hilo?
Nota:
- Uno de los
istreams
escin
- Estoy tratando de reiniciar el proceso, por lo que no se puede cerrar el flujo de entrada de una manera que les prohíbe reseteo.
Editar:
- Yo sé cuando se alcanza el "fin", y yo no sé por cuál de ellos ha finalizado con éxito, y que debe ser matado. Es el asesinato que necesito descubrir (o una estrategia diferente para leer de un istream).
- necesito ambos hilos para salir y limpiar adecuadamente :(
Gracias!
Afortunadamente, estoy desarrollando una máquina Linux por ahora, pero preferiría una versión portátil. ¡Gracias por esto! – mmocny
pthread_cancel() no lo hace para mí en un escenario similar, ni siquiera establece su tipo de cancelación en ASINCRONUS. – gatopeich