Pregunta
documentación QThread::terminate()
afirma que no se recomienda para terminar un hilo llamando a esta función.
En mi programa, tengo que terminar un hilo antes de que termine la ejecución. El flujo está realizando algún cálculo pesada y quiero que el usuario tenga control para detener el cálculo.
¿Cómo puedo hacer que en lugar de llamar QThread::terminate()
?
Solución
Establecer una bandera desde fuera del hilo que se comprueba por el cálculo dentro de la rosca y detener el cálculo si se establece el indicador.
Otros consejos
El uso de banderas es una obvia y la forma más común de hacer el truco, pero si se está trabajando en una plataforma Linux / Unix aconsejaría que use tubos en su lugar. Yo tenía el mismo problema por el que he utilizado una bandera (esto hace que el threadunsafe código, y los errores que surjan de dicha bandera son difíciles de rastrear), luego cambiado la implementación de utilizar tubos que eran una forma eficaz de hacer lo necesario.
Si lo desea, para una plataforma Linux te puedo mostrar cómo utilizar tubos para terminar un QThread.
También puede tener ventanas equivalente de tuberías, que no sé mucho acerca de lo que no he hecho gran parte de la programación en la plataforma Windows.
Espero que esto ayude
mejor es utilizar bandera + mutex que hará que el hilo solución segura.