Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
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?
Responder Con Cita
  #2  
Antiguo 12-02-2009
Avatar de arturom
arturom arturom is offline
Miembro
 
Registrado: dic 2003
Ubicación: Alicante
Posts: 91
Poder: 21
arturom Va por buen camino
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
__________________
"No guardes nunca en la cabeza aquello que te quepa en un bolsillo."

Albert Einstein

Última edición por arturom fecha: 12-02-2009 a las 20:58:18.
Responder Con Cita
  #3  
Antiguo 13-02-2009
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.235
Poder: 20
ElKurgan Va camino a la fama
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
Responder Con Cita
  #4  
Antiguo 13-02-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
No había caído en eso, voy a optar por ese diseño, así me ahorro la condición.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Onkeypress primero escriba y luego ejecute el codigo principiante22 Varios 4 28-08-2008 02:09:01
Como hacer que el Código se ejecute al abrir la ventana Andres_vl OOP 3 20-10-2007 16:24:37
Activar un evento en un momento determinado de un video Carlos Arevalo Varios 3 26-01-2006 23:18:55
solo se ejecute una sola vez la aplicacion.... uper Varios 1 16-03-2005 18:49:40
Select con where filtrando a un nivel determinado de un código HombreSigma Oracle 7 13-09-2004 02:49:26


La franja horaria es GMT +2. Ahora son las 06:31:22.


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