Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Código que se ejecute una sóla vez en un momento determinado del día (https://www.clubdelphi.com/foros/showthread.php?t=63419)

noob 12-02-2009 19:19:42

Código que se ejecute una sóla vez en un momento determinado del día
 
Hola, estoy intentando hacer un código que se ejecute una sóla vez en un instante dado del día, he hecho esto y me funciona, sólo se ejecuta una vez:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  i := 0; // i es un atributo del formulario
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(i));
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (TimeToStr(Time) = '22:12:00') and (i = 0) then
    i := i + 1;
    // Proceso una gran cantidad de datos
end;

He establecido la propiedad Interval del TTimer a 1 para que coja bien la hora pero claro esto puede hacer que al ir tan rápido entre de nuevo en el evento OnTimer antes de que se ejecute i := i + 1, que es la forma que tengo para que no vuelva a entrar en el if.

¿Está bien así o puede darme problemas porque se ejecute más de una vez?

arturom 12-02-2009 20:11:54

Prueba esto
 
Hola,
quizás podrías probar este código a ver si te sirve, utiliza la variable bExec para chequear que se repita solo una vez:

Código Delphi [-]
  bExec: Bool; // atributo del formulario

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (not bExec) and (TimeToStr(Time)='22:12:00') then begin
    bExec:= true;
    // Proceso una gran cantidad de datos
  end;
end;

Saludos

ElKurgan 13-02-2009 07:39:21

También podrías intentar deshabilitar el Timer mientras se ejecuta el proceso largo y al terminar, volver a habilitarlo:

Código:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (TimeToStr(Time)='22:12:00') then
  try
    Timer1.Enabled := False;
    // Proceso una gran cantidad de datos
  finally
    Timer1.Enabled := True;
  end;
end;

Un saludo

noob 13-02-2009 10:47:32

No había caído en eso, voy a optar por ese diseño, así me ahorro la condición.


La franja horaria es GMT +2. Ahora son las 07:39:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi