PDA

Ver la Versión Completa : acción en el tiempo


davidgaldo
18-02-2004, 12:46:57
Hola, me gustaría saber como puedo realizar una acción cada cierto tiempo, es decir, cada media hora, cada 1 hora, 1 al día, etc. Gracias.

Lidia
18-02-2004, 13:08:10
Con un Timer, lo encontrarás en System. Le puedes poner el intervalo de tiempo que desees. :rolleyes:

davidgaldo
18-02-2004, 13:13:03
me puedes poner un ejemplo??

delphi.com.ar
18-02-2004, 14:32:04
Una opción fácil pero no "precisa" (hablamos de milisegundos a un par de segundos de diferencia), es usar el componente TTimer, que lo encontrás en la paleta System, como te ha dicho Lidia. Este TTimer tiene una propiedad Interval que indica en milisegundos cada cuánto se ejecutará el evento OnTimer. Te recomiendo leer la documentación del mismo para mas precisiones.

Saludos!

Amilius
18-02-2004, 15:47:22
Una opción fácil pero no "precisa" (hablamos de milisegundos a un par de segundos de diferencia), es usar el componente TTimer, que lo encontrás en la paleta System, como te ha dicho Lidia. Este TTimer tiene una propiedad Interval que indica en milisegundos cada cuánto se ejecutará el evento OnTimer. Te recomiendo leer la documentación del mismo para mas precisiones.

Saludos!
Algunas detalles:

TTimer encapsula al timer del sistema operativo y tiene una precisión de 54 milisegundos aproximadamente, o unos 18 "ticks" por segundo en Win95, Win98 y Millenium. En XP "parece" que tiene una precisión mayor, por lo menos según lo que pude observar con intervalos de menos de 54 milisegundos. De todas formas, a menos que lo utilices para juegos y efectos gráficos animados, te será bastante útil.

El inconveniente de usar timers más precisos (como el de DelphiX para juegos) es que también utilizan más recursos de cpu y generalmente no es recomendable usar más de un timer de este tipo en una misma aplicación.

Otro detalle que tienes que considerar:

Si el proceso iniciado en el evento "ontimer" tiene un consumo de tiempo de cpu de digamos: 1 segundo y el intervalo de Ttimer es 2 segundos, el siguiente "tick" ocurrirá después de 2 segundos luego que termine el proceso iniciado por el primer "tick", es decir que en lugar que el timer sólo espere 1 segundo esperará 2 segundos, lo que lo hace muy impreciso si el intervalo entre "ticks" es relativamente corto comparado al consumo de tiempo de cpu del proceso inciado por el "ontimer". Generalmente esto no sucede y el tiempo del intervalo de espera es muchísimo mayor al tiempo de proceso.

davidgaldo
18-02-2004, 17:06:35
No te he entendido muy bien, lo siento, ponme un ejemplo con lo siguiente, digamos que quiero que ejecutar esto: "dataset.refresh" cada media hora, como lo hago?

roman
18-02-2004, 17:32:29
digamos que quiero que ejecutar esto: "dataset.refresh" cada media hora, como lo hago?

Esto ya lo preguntaste aquí (http://www.clubdelphi.com/foros/showthread.php?t=7521)

// Saludos

Lidia
19-02-2004, 12:21:11
A ver... Si clickeas dos veces en el Timer te saldrá:

procedure TForm1.Timer1Timer(Sender: TObject);
begin

end;

end.

donde puedes meter todo lo que quieras que se ejecute cada el intervalo de tiempo que le hayas puesto.

Si? :(

Al González
21-02-2004, 05:28:02
¡Buen día a todos!

Así es. En el manejador del evento OnTimer puedes poner el código que desees que se ejecute cada determinado tiempo.


...digamos que quiero que ejecutar esto: "dataset.refresh" cada media hora...
Creo que agregaré una propiedad a los componentes data set que he creado, para que tengan la funcionalidad de autorefrescarse cada cierto tiempo, siempre y cuando se encuentren en estado dsBrowse, entre otras condiciones. :)


{ Intervalo de Refrescado cada 30 minutos }
Tabla.InteRefr := 1800000;


Lástima que Delphi no tenga todavía herencia insertada, para poder hacer esto de forma centralizada en una clase directamente derivada de TDataSet, e insertada como nuevo padre de todas sus descendientes. Así no tendría que modificar el código de varias clases, sino de una sóla.


Un abrazo. ¡Hasta pronto!

Al González :).

delphi.com.ar
23-02-2004, 00:15:23
¡Buen día a todos!
Lástima que Delphi no tenga todavía herencia insertada, para poder hacer esto de forma centralizada en una clase directamente derivada de TDataSet...
Esto es un carma para ti :D

Puedes hacerlo mediante un objeto externo, que tenga enlazado un TDataSet y se encargue de refrescarlo..

Saludos!

Al González
25-02-2004, 05:21:47
¡Buen día a todos!

Gracias Delphi.com.ar

Si, en realidad hay muchas soluciones a la falta de herencia insertable. Pero ¡ah, cómo hace falta! ;).

La libertad de poder conducir un auto potente sin necesidad de escoltas. ¿Me entiendes verdad?

Al González :).