Ver Mensaje Individual
  #2  
Antiguo 01-06-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ElGatitoTapatio.

El error que estas recibiendo no se debe a la ejecución del Thread. Puede provocarlo el código invocado dentro del método EnviarDocumentos o bién otro ajeno a la unidad uHilos, códigos que en ambos casos no puedo evaluar.

Verificarlo esto es muy simple. Basta con hacerte otra unidad en la que quites todo lo foráneo a la ejecución del Thread y respetes el resto.

Por ejemplo:
Código Delphi [-]
unit Unit2;

interface

uses
  Windows,  SysUtils, Classes;

type
  TEnviarTemporales = class( TThread )
  private
    Handle : HWND;
  protected
    procedure EnviarDocumentos;
    procedure Execute; override;
  public
    constructor Create(EHandle:HWND; ThreadPriority: TThreadPriority);
  end;

implementation

uses Unit1; // en tu caso main

constructor TEnviarTemporales.Create(EHandle:HWND; ThreadPriority: TThreadPriority);
begin
  inherited Create(False);
  Handle := EHandle;
end;

procedure TEnviarTemporales.EnviarDocumentos;
var
   NetResource: TNetResource;
   vRuta,NuevaRuta : PChar;
   Error,Diagonal : String;
   ErrCode,i : integer;
   Listado,ListadoEliminar : TStrings;
begin
    Listado := TStringList.Create;
    ListadoEliminar := TStringList.Create;
    try
      { INICIO CODIGO REEMPLAZADO PARA PRUEBA }
      for i:= 1 to 50 do
      begin
        Form1.Caption := IntToStr(i); // tu caso: main.Caption := IntToStr(i);
        Sleep(20);
      end;
      { FIN CODIGO REEMPLAZADO PARA PRUEBA }
    finally
      Listado.Free;
      ListadoEliminar.Free;
    end;
end;

procedure TEnviarTemporales.Execute;
begin
  Synchronize(EnviarDocumentos);
  Terminate;
end;
end.
Y luego verás que se lo puede llamar una o n veces que no presenta ningún error durante o al cerrar la aplicacion:
Código Delphi [-]
...
implementation

uses Unit2; 

var
  HEnviarTemporales  : TEnviarTemporales;

procedure TForm1.FormDblClick(Sender: TObject);
begin
  if not Assigned(HEnviarTemporales) then
  begin
    HEnviarTemporales := TEnviarTemporales.Create(Handle, tpNormal);
    HEnviarTemporales := nil;
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 01-06-2013 a las 00:40:41.
Responder Con Cita