Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Forzar a thread a que se termine (https://www.clubdelphi.com/foros/showthread.php?t=58335)

Cecil 16-07-2008 21:35:24

Forzar a thread a que se termine
 
Hola, realmente no soy muy dado a trabajar con threads, con lo que tengo un pequeño problema:
El thread que uso tiene asignado un evento OnTerminate, de modo que, cuando el hilo termina, se llama a dicho evento. Ahora bien, hay veces que no se llama al evento OnTerminate y realmente no se porque... me he asegurado y si, el problema está en que a veces no se llama a ese evento. ¿Es posible forzar a que se termine el thread llamando a ese evento?. Gracias y un saludo grande.

donald shimoda 16-07-2008 22:43:16

Cita:

Empezado por Cecil (Mensaje 300882)
Hola, realmente no soy muy dado a trabajar con threads, con lo que tengo un pequeño problema:
El thread que uso tiene asignado un evento OnTerminate, de modo que, cuando el hilo termina, se llama a dicho evento. Ahora bien, hay veces que no se llama al evento OnTerminate y realmente no se porque... me he asegurado y si, el problema está en que a veces no se llama a ese evento. ¿Es posible forzar a que se termine el thread llamando a ese evento?. Gracias y un saludo grande.

Una pregunta, como sabes que no pasa por el Onterminate? Mira que si estas haciendo el debugger con los threads se mama...

Muestra el código que mata a la tardea, y en todo caso el codigo del onterminate si no toca la tarea del vcl puedes ponerlo en el ondestroy de la tarea.

Como matar una tarea? Lo seguro es suspenderla y terminarla, pero depende de que este haciendo. Si me muestras el código te ayudo mejor.

Saludos.

Cecil 17-07-2008 16:46:17

Gracias por tu respuesta. Bueno, código código aún no está del todo escrito, solo que necesito forzar de alguna manera a que el thread se cierre y se llame en el 100% de las ocasiones al evento OnTerminate. Me he dado cuenta de que a veces no se llama, porque he hecho varias pruebas, tales como cambiar el caption en el evento y al iniciar el thread, a través del debugger, y varios medios mas... He probado eso de Suspend; y Terminate;, pero cuando se llama al Suspend; se acaba el thread y no llama al OnTerminate. La verdad, no lo entiendo porque ocurre..

donald shimoda 17-07-2008 16:49:41

Cita:

Empezado por Cecil (Mensaje 301063)
Gracias por tu respuesta. Bueno, código código aún no está del todo escrito, solo que necesito forzar de alguna manera a que el thread se cierre y se llame en el 100% de las ocasiones al evento OnTerminate. Me he dado cuenta de que a veces no se llama, porque he hecho varias pruebas, tales como cambiar el caption en el evento y al iniciar el thread, a través del debugger, y varios medios mas... He probado eso de Suspend; y Terminate;, pero cuando se llama al Suspend; se acaba el thread y no llama al OnTerminate. La verdad, no lo entiendo porque ocurre..

Cecil por eso te digo , mira, una forma simple de resolverlo es crear la tarea y al destruirla en el destroy de la tarea hacer lo que quieras hacer. Siempre con Syncronize(Procedimiento) si es que vas a toca algo de la tarea principal de la VCL donde procedimiento es donde haces lo que quieras hacer.

Como no hay codigo, es lo único que se me ocurre sin conocer mas del caso. Si me cuentas en detalle que quieres hacer te ayudo en lo que pueda.
Saludos.

Cecil 18-07-2008 13:26:31

Muchas gracias, me ha funcionado eso de ponerlo en el OnDestroy y hacer un Synchronize :). Mil gracias compañero!

donald shimoda 18-07-2008 14:49:54

Cita:

Empezado por Cecil (Mensaje 301308)
Muchas gracias, me ha funcionado eso de ponerlo en el OnDestroy y hacer un Synchronize :). Mil gracias compañero!

Que bueno me alegro!

Un gusto ayudarte.

Saludos.


La franja horaria es GMT +2. Ahora son las 06:48:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi