![]() |
Parar un hilo de ejecución
Tengo un hilo de ejecución casi consitnuo que controla las entradas desde una base de datos y la enseña en pantalla. Lo malo es que si cierro la pantalla cuando el hilo está ejectuandose, me da un error. ¿Alguién sabe como destruir en un hilo que se está ejecutando? ¿O pararlo? Cualquier cosa que lo detenga para que no de el fallo. Muchas gracias.
|
Primero te recomendaria separar el codigo del hilo del form y teoricamente, con terminate y un comprobacion de la propiedad terminated del hilo para salir del bucle principal del hilo.
En la ayuda de delphi pone el siguiente codigo
yo lo extenderia asi
|
no me sirve
la respuesta anterior entiendo que mientras no se termine el hilo, siga ejectuandose, pero lo que necesito es que esté en el punto que esté el hilo, pararlo. El hilo puede estar al principio de su ejecución, o a mitad, o al final. Pero independientemente de donde esté necesito matarlo para poder salir del form sin que me de un fallo.
|
Hola,
¿No bastaría con ejecutar el método "Terminate"? Es decir, cuando se va a cerrar el formulario en cuestión ejecutar el método "Terminate" del Hilo. En ese momento el se saldrá del "bucle" que se está ejecutando a su vez en el Hilo. ¿No? ;) |
Tienes que comprobar en cualquier bucle y esporadicamente, que el hilo no este terminado, y si es asi, salir y limpiar cualquier objeto que tengas creado. En un hilo simple donde todo el codigo estuviera en el Execute, el ejemplo anterior es lo basico. Si llamas a varios metodos desde el execute, entonces deberias comprobar en esos metodos la propiedad "Terminated" para abortar la operacion en cuanto sea necesario. Y como dice Dec, en cualquier punto del form, llamas a Hilo.Terminate y con un chequeo de la propiedad terminated en el Hilo debe finalizar rapido. Por otra parte un buen sitio para el terminate es en OnCloseQuery, ya que si por alguna razón no puedes terminar el hilo, abortas el cierre de la aplicacion/ventana.
Espero que te sea de ayuda |
lo he intentado
he intenado hacer hilo.terminate, pero lo tiene la función. pongo hilo. y en el desplegable que sale en delhpi me aparecen 3 ocpiones nada más. ¿Como hay que crear el hilo para que tenga la función terminate?
|
Hola,
Si has creado un nuevo "Hilo" derivándolo de la clase "TThread" (que es lo habitual, creo) tu Hilo debería contar ya con el método "Terminate", puesto que es "TThread" quien implementa dicho método. Por otro lado el procedimiento "Terminate" se reduce a esto:
Es decir, que "lo único" que se lleva a cabo es dar a la variable privada "FTerminated" el valor "True". Como la propiedad "Terminated" del Hilo lee esta variable privada, pues eso, en cuanto ejecutes el procedimiento "Terminate" la propiedad "Terminated" valdrá "True",... y el bucle de ejemplo que anteriormente puso el compañero acabará, puesto que:
Es decir, mientras la variable "Terminated" valga "False" el bucle continúa ejecuándose, empero, en cuanto esta valga "True" el bucle no se ejecutará más. ¿De dónde sacas tu Hilo? ¿Lo derivas de "TThread"? Porque, como digo, si es así, deberías contar con el método "Terminate" sin más, no tienes que implementarlo tú por tu cuenta. |
La franja horaria es GMT +2. Ahora son las 02:10:05. |
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