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;
sleep(10000);
end;
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