Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-02-2014
Avatar de Red_Leon
Red_Leon Red_Leon is offline
Miembro
 
Registrado: oct 2007
Ubicación: Castilla la Mancha
Posts: 27
Poder: 0
Red_Leon Va por buen camino
Vida de un Thread!

Buenos días a todos!

Me preguntaba a ver si alguien me puede echar una mano. He estado buscando por hay y no he encontrado la respuesta y a ver si alguien me puede iluminar un poco en el tema.

He creado un hilo para sincronizar la base de datos del cliente en local con la del servidor, este hilo se estará en ejecución durante toda la vida del programa. El código básicamente es este:

Código Delphi [-]
TThreadSynch = class(TThread)
   private     
     status:TStatusSynch;
     newStatus:TStatusSynch;
   protected
     procedure Execute; override;
   public
     constructor Create(CreateSuspended:Boolean);
     procedure showStatus;
   end;   

constructor TThreadSynchronize.Create(CreateSuspended:Boolean); 
begin
   self.status:=ssInit;
   inherited Create(CreateSuspended);
   self.FreeOnTerminate:=true;
end;  

procedure TThreadSynchronize.Execute; 
begin
   while not Terminated do
   begin
       if Se ha conseguido conectar con el servidor then
       begin
         self.newStatus:=ssConnect;
         synchronize(showStatus);
         if Se debe actualizar la base de datos then
         begin
           self.newStatus:=ssSynchronizing;
           synchronize(showStatus);
           Sincronización de la base de datos
           self.newStatus:=ssConnect;
           synchronize(mostrarEstado);
         end;
       end
       else
       begin
         self.newStatus:=ssNoConnect;
         synchronize(mostrarEstado);
       end;
     {Se duerme el hilo 10 seg}
     sleep(10000);
   end;
   {Terminación del Hilo}
   self.Terminate; 
end;  

procedure TThreadSynchronize.mostrarEstado; 
begin
   if (self.status <> self.newStatus) then   
   begin
     self.status:=self.newStatus;
     Se muestra el estado de la conexión por pantalla;
   end;
end;

Vale, creo que en código no esta nada mal.

Desde un formulario creo este hilo, pero es la única referencia que hago al hilo.

Mi pregunta es, si yo no llamo a al hilo.Terminate, que no lo hago, ¿quien termina este hilo? ¿hasta cuando esta en ejecución?

Yo al cerrar la aplicación, veo como el hilo se termina, la aplicación no se queda bloqueada ni abierta ¿por qué?

Si cierro la aplicación mientras esta sincronizando la base de datos salta este error: "La operación no se puede realizar de forma asincrona" y a continación se cierra la aplicación, dejando la sincronización a medias.

Lo que realmente me gustaría es que la aplicación no se cerrase asta que la sincronización este terminada.

O que el hilo siguiera la ejecución aunque la aplicación estuviese cerrada.

¿Que sería lo mas recomendable y alguna idea de que hacer?

Muchas gracias de antemano.

Red_Leon

Última edición por Red_Leon fecha: 20-02-2014 a las 13:39:37.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 calco_hugo Varios 6 26-07-2010 20:12:50
Thread Paulao Varios 1 09-05-2008 00:42:34
Thread y showmodal jef Varios 32 07-12-2007 23:55:35
Thread bendito thread...se me pierde la ventana Seba.F1 API de Windows 5 02-02-2006 00:16:30
Thread y Form progmaq Varios 4 31-03-2005 14:16:50


La franja horaria es GMT +2. Ahora son las 08:43:10.


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