Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-07-2008
Avatar de Cecil
Cecil Cecil is offline
Miembro
 
Registrado: may 2007
Posts: 97
Poder: 17
Cecil Va por buen camino
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.
__________________
"There is nothing either good or bad, but thinking makes it so" William Shakespeare.
Responder Con Cita
  #2  
Antiguo 16-07-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por Cecil Ver Mensaje
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.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #3  
Antiguo 17-07-2008
Avatar de Cecil
Cecil Cecil is offline
Miembro
 
Registrado: may 2007
Posts: 97
Poder: 17
Cecil Va por buen camino
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..
__________________
"There is nothing either good or bad, but thinking makes it so" William Shakespeare.
Responder Con Cita
  #4  
Antiguo 17-07-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por Cecil Ver Mensaje
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.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #5  
Antiguo 18-07-2008
Avatar de Cecil
Cecil Cecil is offline
Miembro
 
Registrado: may 2007
Posts: 97
Poder: 17
Cecil Va por buen camino
Muchas gracias, me ha funcionado eso de ponerlo en el OnDestroy y hacer un Synchronize . Mil gracias compañero!
__________________
"There is nothing either good or bad, but thinking makes it so" William Shakespeare.
Responder Con Cita
  #6  
Antiguo 18-07-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por Cecil Ver Mensaje
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.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Thread bendito thread...se me pierde la ventana Seba.F1 API de Windows 5 02-02-2006 00:16:30
Moverme por un dataset hasta que termine marceloalegre Conexión con bases de datos 1 10-11-2005 21:14:57
Ejecutar Exe de mi Aplicacion y Esperar a que Termine spider_Ramon API de Windows 4 07-09-2005 01:07:01
ejecutar archivo y esperar que termine agustincs API de Windows 4 18-08-2004 22:53:21
Esperar a que termine un proceso felixgo OOP 4 02-06-2004 19:46:45


La franja horaria es GMT +2. Ahora son las 15:37:55.


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