Ver Mensaje Individual
  #4  
Antiguo 10-09-2021
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Reputación: 11
bucanero Va camino a la fama
hola!!

el problema que te surge es porque al activar el TIMER se inicia una especie de "ejecución en paralelo" sin llegar a ser un hilo como tal, y mientras en el hilo principal del programa entras en un bucle sin esperas y sin darle descanso a la CPU, a ejecutar el proceso del timer.

Esto lo puedes soluciona llamando a application.processmessages en el bucle de espera, pero el problema que te va a surgir es que si ejecutas el bucle muy rápido, llamando a processmessages continuamente sin esperas intermedias puedes llegara a saturar el S.O., Para evitar eso, te recomiendo que pongas además un sleep


Prueba con este código:
Código Delphi [-]
procedure TForm2.Button2Click(Sender: TObject);
var
  i, Nrep: Integer;
begin
  i := StrToInt(Edit1.Text);
  for Nrep := 0 to 5 do begin
    Label2.Caption := format('Ciclo #%d:', [Nrep]);
    Timer1.Enabled := True;
    N := 0;
    while (n < i) do begin
      application.processMessages;
      // entra en modo sleep y el S.O. cambia el foco de la CPU a otros procesos, evitando sobrecargar el sistema
      sleep(200);
    end;
    Timer1.Enabled := False;
  end;
  Label2.Caption := 'Parado';
end;
Responder Con Cita