Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ejecutar programa a una hora determinada (https://www.clubdelphi.com/foros/showthread.php?t=90360)

mblascog 24-05-2016 08:52:41

Ejecutar programa a una hora determinada
 
Buenas,
En una tabla tengo guardadas 4 hores, pongamos, por ejemplo, las 9:30, las 12:11, las 15: 44 y las 18:08.
Quiero que a estas horas se ejecute algo.
A mi se me ocurre crear un programa con un timer y cuando sea la hora lance el proceso. Mi temor es que si el timer va a consumir muchos recursos, pues a cada minuto tengo que comprobar si es la hora, no?

Es la única manera de hacerlo?
Gracias

Lepe 24-05-2016 11:47:42

Básicamente sí, aunque la implementación puede variar, me explico:
- guarda en la BBDD con formato de fecha y hora (es más fácil comparar, ver diferencias de horas, etc).
- Pide el SQL ordenado por fecha
- Con MillisecondsBetween (unidad DateUtils), sacas la diferencia entre la fecha de la BBDD y ahora mismo (función Now()). El resultado se lo asignas al Timer.Interval.

Como el Interval es un Cardinal (creo recordar), puedes programar el Timer para que salte dentro de 49 días como máximo (en sistemas 24 horas x 7 días funcionando).

Cuando llegue el evento timer, haces lo que tengas que hacer y vuelves a pedir el SQL ordenado por fechas, coges la primera fecha y repites el proceso.

De esta forma, no tienes que consultar 1440 veces al día (cada minuto del día) si ya es la hora de hacer algo. Lo haces una sola vez al día o cuando corresponda.

Saludos!

mblascog 24-05-2016 14:11:05

Buen apunte Lepe, me gusta. Voy a implementarlo. Muchas gracias

jhonny 24-05-2016 14:15:50

Otra manera sería utilizando el programador de tareas dewindows.

mblascog 24-05-2016 17:14:17

Programador de tareas? la hora es variable, está grabada en un campo de base de datos. Cómo tendría que hacerlo? Puedo crear la tarea desde Delphi, y modificar la hora si interesa?

Gracias

Combat-F2D 25-05-2016 07:20:14

en windows tienes la posibilidad de atacar las tareas programadas mediante consola con

Código:

schtasks
yo personalmente las tareas programadas las tiraría como sistema y no con un timer

es otra idea más

mblascog 25-05-2016 08:31:35

Combat-F2D, gracias por tu respuesta. Tal como me sugirió Lepe, cuando abro el.programa calculo el tiempo que falta, desde ahora hasta la hora programada, en milisegundos, y lo asigno a Interval del Timer.
Me parece que es buena solución.

Gracias


La franja horaria es GMT +2. Ahora son las 18:06:25.

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