Ver Mensaje Individual
  #4  
Antiguo 01-06-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
ElGatitoTapatio,

Cita:
Empezado por ElGatitoTapatio
...Hilo a mi aplicación para realizar un proceso de copiado de archivos...el hilo se ejecuta correctamente...cuando cierro mi aplicacion me genera una excepcion...
Revisa este código:
Código Delphi [-]
constructor TEnviarTemporales.Create(EHandle:HWND; ThreadPriority: TThreadPriority);
begin
  
   inherited Create(False);

   // Establece la prioridad del hilo (tpNormal es el default).
   Priority := ThreadPriority;  

   Handle:= EHandle;

end;

procedure TEnviarTemporales.Execute;
begin

  // Indica que el hilo sera destruido de forma automática por el VCL cuando este finalize.
  FreeOnTerminate := True;

  // Verifica si el hilo se ha finalizado
  if not Terminated then
     Synchronize(EnviarDocumentos);

end;

function TEnviarTemporales.CopiarDocumentos(destino,ruta : String): Integer;
var
...
begin
...
   // Verifica si el hilo se ha finalizado
   if Not Terminated then
      Result:= ShFileOperation(F);
end;

procedure TEnviarTemporales.EnviarDocumentos;
var
...
begin
...
   for i := 0 to Listado.Count-1 do
   begin
      // Verifica si el hilo se ha finalizado
      if Terminated then Exit;
   ...
   end
...
end;

procedure Tfrm_main.FreeNewThread(Sender: TObject);
begin
   // Asegura que la instancia no tenga ninguna referencia
   HEnviarTemporales := nil;
end;

procedure Tfrm_main.EnviarTemporales;
begin
   if not Assigned(HEnviarTemporales) then
   begin

      HEnviarTemporales := TEnviarTemporales.Create(Handle, tpNormal);

      // Este procedimiento se ejecuta al finalizar el hilo
      HEnviarTemporales.OnTerminate := FreeNewThread;

   end
end;

// Si quieres finalizar el hilo en cualquie instante antes de su finalización
procedure Tfrm_main.EndNewThread;
begin
   // Envía una señal de finalización al hilo
   HEnviarTemporales.Terminate;
end
El código anterior sugiere un mecanismo de control para la finalización ordenada del hilo en función del problema planteado, sin embargo te sugiero probar lo indicado en el Msg #2 y hacer los ajustes que sean necesarios.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 01-06-2013 a las 00:29:45.
Responder Con Cita