Ver Mensaje Individual
  #6  
Antiguo 19-11-2005
manuel_conde manuel_conde is offline
Registrado
 
Registrado: nov 2005
Posts: 3
Reputación: 0
manuel_conde Va por buen camino
Hola de nuevo a todos.

Ya he probado una alternativa: he creado un thread al cual se le puede pasar la dirección del trabajo a realizar, dejando para el proceso principal el trabajo de indicar el estado de progreso. Ahí va la solución:


Proceso principal:
Código Delphi [-]
type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
private
public
procedure ProcesoLargo1(datos : integer);
procedure ProcesoLargo2(datos : integer);
end;
var
Form1: TForm1;
implementation
uses unit2;
{$R *.dfm}
procedure tform1.ProcesoLargo1(datos : integer);
begin
// un proceso largo, y que tiene interacción con elementos
// visuales.
sleep(10000);
button1.Caption := inttostr(datos);
sleep(10000);
end;
procedure tform1.ProcesoLargo2(datos : integer);
begin
// un proceso largo, y que tiene interacción con elementos
// visuales.
sleep(10000);
button1.Caption := inttostr(datos);
sleep(10000);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
th : tmythread;
begin
th := tmythread.create(true);
th.ExecTrabajo(form1.ProcesoLargo1,1234);
while th.trabajando do
begin
application.ProcessMessages;
form1.Caption := 'Trabajando ' +floattostr(now);
end;
form1.Caption := 'Trabajo finalizado';
freeAndNil(th);
end;
Proceso del thread:
Código Delphi [-]
type
TCProcedure = procedure (datos: integer) of object; // Procedure in a class
tmythread = class(TThread)
public
trabajando : boolean;
procedure ExecTrabajo(proc : TcProcedure; losDatos: integer);
protected
datos : integer;
proceso : TcProcedure;
procedure Execute; override;
end;
implementation
procedure tmythread.ExecTrabajo(proc : TcProcedure; losDatos: integer);
begin
trabajando := true;
proceso := proc;
datos := losDatos;
resume;
end;
procedure tmythread.Execute;
begin
proceso(datos); // ejecuta el procedimiento de la otra clase
trabajando :=false;
end;

Seguiremos investigando....

Última edición por manuel_conde fecha: 19-11-2005 a las 18:27:22. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita