![]() |
Salir de TThread
Hola amigos.
Necesito retomar el control de un programa después de terminar un hilo. Pongo un esquema del programa
Al terminar ejecuta el MessageBox, pasa por el procedimiento LimpiarPantalla, pero no me limpia los edits. Pueden indicarme que es lo que esta mal?. Muchas gracias |
La VCL no es thread-safe, no podes modificar propiedades de los controles dentro de un thread directamente. Tenes que usar el Synchronize
Revisa este Post de Neftali |
Conforme, pero no puedo salir del hilo y continuar.
|
Hola.
Los hilos son "potentes", pero antes de "liarse la manta a la cabeza" y ponerse a programar hilos, habría que intentar entender y leer cómo funcionan mínimamente, porque también son "delicados". Hay varias preguntas y varias cosas a comentar en este hilo. En cuanto a las preguntas: Cita:
Otra cosa es cómo saber cuando el hilo termina. Pasa eso debes utilizar el evento OnTerminate, que se lanza cuando el hilo acaba. Para poder usar este evento, debes asignar al Thread este procedimiento antes de lanzarlo. Cuando acabe el control volverá a este procedimiento, para hacerte saber que ya ha acabado. Si buscas en los foros sobre este evento, seguro que encuentras ejemplos(por ejemplo este). Fíjate que al crear el thread hace algo como esto:
NOTA: En este caso para asegurar la asignación crealo con el parámetro a True y haz el resume manualmente, como está en el código de ejemplo. Y tiene definido este procedimiento como:
Cuando el hilo termine el control volverá a HandleTerminate. Por otro lado, comentas esto: Cita:
Si lo has hecho correctamente, tal y como he dicho, tu programa continua al iniciar el hilo (no se bloquea). Y "salir" del hilo no debes hacerlo tú, al acabar el trabajo el hilo finaliza. Otra cosa es que quieras interrumpir el trabajo del hilo "a medias". Para eso debes utilizar la propiedad Terminated dentro del hilo, como si fuera un flag; Algo así:
En cuanto al código que has puesto, tal y como te ha comentado Agustín, es seguro que la modificación de los Edit directamente (sin Synchronize) te va a dar problemas y probable que el Application.ProcessMessagess también. Debes arreglar esto antes de nada, porque eso te puede estar provocando cualquier otro mal funcionamiento del código (incluidos errores de Access Violation). Un saludo. |
Hola Neftali.
Lo que nos pasa a los que somos autodidactas es que a veces cogemos los conceptos equivocados, creemos que sabemos i no sabemos nada. Muchas gracias por tu respuesta.Estudiando tu respuesta y tus ejemplos de threads se me han aclarado bastante los conceptos que tenia equivocados. Muchas gracias y un saludo. |
La franja horaria es GMT +2. Ahora son las 18:36:00. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi