PDA

Ver la Versión Completa : Automatizar ejecucion de procesos


alopete
08-05-2008, 09:25:08
Buenos días:
A ver si me podeis ayudar: tengo varios procesos que quiero que se ejecuten todos los dias a ciertas horas, por ejemplo, el proceso A a las 20, el proceso B a las 21,...
Se me ocurre que puedo hacerlo con
1-threats (que se repite cada cierto tiempo)
2- Timers (cada cierto tiempo)
3- Haciendo un .bat y programando en el task manager de windows.

Cual seria la mejor opcion?
Los threats me han dado problemas en otros procesos porque acaban bloqueandose.

Muchas gracias
Ander

Neftali [Germán.Estévez]
08-05-2008, 10:04:04
Los threads es una manera de implementarlo, pero no tienen nada que ver con procesos periódicos.

Si quieres programarlo tú, hazlo en Delphi con Timers (aplicación o servicio), si no quieres reinventar la rueda, utiliza el programador de tareas que está justo para eso...

alopete
08-05-2008, 10:24:28
Hola Neftali.
Muchas gracias por responder.
He pensado que lo mejor será hacerlo con timers ya que tengo que hacer una especie de consola para saber el estado de los procesos lanzados y poder lanazarlos desde la consola. Mi idea es hacer un formulario con verios botones. Pero me queda una duda: com puedo decirle a un timer que la primera vez que se ejecute sea a las 20? tras eso seria ponerle el intervalo a 24 horas (en milisegundos). Es correcto?

Neftali [Germán.Estévez]
08-05-2008, 11:31:37
Tu aplicación debe estar funcionando siempre.
Los timers, los pones cada minuto (por ejemplo); El timer lo único que hace es darte la posibilidad de consultar la hora. Cada minuto (cuando "salta" ell timer) consultas la hora del sistema y la comparas con la que tengas.

Si la comparación da positivo lanzas el proceso que necesites.

Lepe
08-05-2008, 16:49:58
- interval := abs(MillisecondsBetween(hora_actual, '20:00:00'));
- pones el timer a ese intervalo ...y a esperar.

Necesitarás RecodeTime de la unidad DateUtils. Además de comprobar si la hora actual es mayor que 20:00 ó 21:00, etc.

Saludos

alopete
09-05-2008, 07:59:30
Muchas gracias a los dos.
Lo voy a intentar como decis.

alopete
09-05-2008, 08:55:36
Hola de nuevo:

Al final he decidido prorgramarlo para que se pueda lanzar tantas veces como se quiera y sea programable. Para ello lo que he hecho ha sido: (tal vez le sirva a alguien):

Poner un timer con un intervalo de media hora
Cuando se ejecuta el timer, compruebo la ultima ejecucion que se realizo del proceso (q la he guardado en la bbdd). Si la hora actual es una hora en la que se tiene que lanzar y la ultima ejecución es anterior, lanzo el proceso y guardo la ultima ejecucion en la bbdd.
Voy a crear una lista de procesos (en la bbdd) con las horas a las que se tiene que lanzar, para asi no tener que modificar el código cada vez que se cambia las horas de lanzamiento.
Supongo que no será la mejor solución pero es bastante simple y funciona.
Muchas gracias a todos