Ver Mensaje Individual
  #1  
Antiguo 07-12-2012
frangarrob frangarrob is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 13
Reputación: 0
frangarrob Va por buen camino
Problema con librería DLL y TThread

Tengo el siguiente problema, que no sé cómo solucionar, he probado de todo... TBackgroundWorker, TThread, JVThread... y nada de nada...

Esto es un resumen de mi librería dll

type
TNuevo = class(TObject)
sNuevo: TIdHTTP;
private
public
procedure Funcion(var1, var2, var3: string);
constructor Create;
destructor Destroy; override;
end;

constructor TNuevo.Create;
begin
inherited;
sNuevo := TIdHTTP.Create(nil);
sNuevo.HandleRedirects := True;
end;

destructor TNuevo.Destroy;
begin
sNuevo.Free;
inherited;
end;

var finalizado : Boolean;

procedure TNuevo.Funcion(var1, var2, var3: string);
begin
..........
..........
sNuevo.Get(var1);
..........
..........
finalizado := True;
end;


En un momento de la rutina principal, quiero crear un hilo nuevo que ejecute el procedimiento "Funcion". Entonces me he creado un objeto TThread, así:

Type
TBack = class(TThread)
private
protected
procedure Execute; override;
public
Constructor Create(CreateSuspended : boolean);
end;

constructor TBack.Create(CreateSuspended : boolean);
begin
inherited Create(CreateSuspended);
end;

var sBack : TBack;

procedure TBack.Execute;
begin
try
gNuevo.Funcion('texto1', 'texto2', 'texto3': string);
except
finalizando := True;
end;
end;


Entonces, en la rutina principal pongo:

gNuevo := TNuevo.Create;
sBack := TBack.Create(False);
sBack.FreeOnTerminate := False;
finalizado := False;
sBack.Resume;
while finalizado = False do begin
try
Application.ProcessMessages;
except
end;
end;
gNuevo.Destroy;
sBack.Destroy;


Pero no hay forma de que funcione de forma correcta...
Responder Con Cita