Ver Mensaje Individual
  #1  
Antiguo 29-06-2006
Bauhaus1975 Bauhaus1975 is offline
Miembro
 
Registrado: may 2005
Ubicación: Málaga
Posts: 135
Reputación: 20
Bauhaus1975 Va por buen camino
Unhappy Medir tiempo de ejecución usando Timer (Problemas)

Hola a todos, les comento mi nuevo problema
(Trabajo con Windows2000 y Delphi6)
Tengo en un procedimiento un proceso que tarda mucho en ejecutarse y necesito medir el tiempo de ejecución de dicho proceso. Para ello he añadido un TTimer y un par de procedimientos 'set' y 'end'. El primero se encarga de activar el Timer (Timer.Enabled=true) lo llamo justo antes de la llamada al proceso principal y el segundo justo cuando termina y se encarga de desactivar el Timer.

He puesto unos label en el formulario de tal forma que cada segundo el evento del 'Timer' del timer me pinta el reloj, que avanza segundo a segundo.
Todo esto funciona OK, el problema es cuando se llama al proceso principal que se apodera de la ejecución y el contador ¡no funciona!

También he probado a iniciar el cronómetro por un botón y luego invocar al procedimiento, en cuanto que empieza el éste, el crono deja de funcionar.

¿Alguien sabe como hacer para que ambos procesos puedan funcionar y el contador me cuente el tiempo de cómputo del proceso principal?

Adjunto un esquema de los procedimientos


Código Delphi [-]

procedure Tform1.inicio();
begin
        // Inicialización del cronómetro
        form1.set();
        // Llamada al proceso principal
        resultado := generarProceso([...]);
        // Paramos el cronómetro
        form1.end();
end;

procedure Tform1.set();
begin
        segundos:=0;minutos:=0;horas:=0;dias:=0;
        form1.Timer1.Interval := 1000;
        form1.Timer1.Enabled := true;
end;
 
procedure Tform1.end();
begin
        form1.Timer1.Enabled := false;
end;
 
procedure Tform1.Timer1Timer(Sender: TObject);
begin
segundos := segundos + 1;
if (segundos > 59) then
 begin
 segundos := 0;
 minutos := minutos + 1;
 if (minutos > 59) then
  begin
  minutos := 0;
  horas := horas + 1;
  if (horas > 23) then
   begin
   horas := 0;
   dias := dias + 1;
  end;
 end;
end;
// Pintar el reloj en el form
form1.lbSegundos.Caption := inttostr(segundos);
form1.lbMinutos.Caption := inttostr(minutos);
form1.lbHoras.Caption := inttostr(horas);
form1.lbDias.Caption := inttostr(dias);
end;

Muchas gracias y un saludo.
Responder Con Cita