Ejecutar proceso

19/09/2007 - 10:00 por Aurelio Martínez Corchano | Informe spam
Hola,

Tengo una aplicación que ejecuta un hilo. Este hilo debería mantenerse en
suspensión, hasta que llegue una determinada hora, por ejemplo las 12:00 o
las 18:00 y entonces realizar una tarea
La primera idea que he tenido es utilizar un timer, que se ejecute cada
segundo y compruebe la hora que es, y cuando sea la hora indicada, ejecute
su tarea. Sin embargo creo que este método no es muy eficiente, ya que cada
segundo se debe estar comprobando la hora.

No se si habrá una forma más elegante y eficiente de hacer lo que quiero.

Gracias antes de nada.

Aurelio Martínez Corchano
Especialista Software - Alhambra-Eidos

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
19/09/2007 - 10:49 | Informe spam
"Aurelio Martínez Corchano" wrote in message
news:eV5QqMp%
Tengo una aplicación que ejecuta un hilo. Este hilo debería mantenerse en
suspensión, hasta que llegue una determinada hora, por ejemplo las 12:00 o
las 18:00 y entonces realizar una tarea
La primera idea que he tenido es utilizar un timer, que se ejecute cada
segundo y compruebe la hora que es, y cuando sea la hora indicada, ejecute
su tarea. Sin embargo creo que este método no es muy eficiente, ya que
cada segundo se debe estar comprobando la hora.

No se si habrá una forma más elegante y eficiente de hacer lo que quiero.



Podrías calcular cuántos milisegundos faltan desde la hora actual hasta
la hora deseada, y hacer un Thread.Sleep(milisegundos).
Respuesta Responder a este mensaje
#2 Aurelio Martínez Corchano
19/09/2007 - 12:55 | Informe spam
Gracias Alberto, es una buena idea.

Pero seguro que no hay un método que no sea tan manual?



Aurelio Martínez Corchano
Especialista Software - Alhambra-Eidos

"Alberto Poblacion"
escribió en el mensaje news:ubAALop%
"Aurelio Martínez Corchano" wrote in message
news:eV5QqMp%
Tengo una aplicación que ejecuta un hilo. Este hilo debería mantenerse en
suspensión, hasta que llegue una determinada hora, por ejemplo las 12:00
o las 18:00 y entonces realizar una tarea
La primera idea que he tenido es utilizar un timer, que se ejecute cada
segundo y compruebe la hora que es, y cuando sea la hora indicada,
ejecute su tarea. Sin embargo creo que este método no es muy eficiente,
ya que cada segundo se debe estar comprobando la hora.

No se si habrá una forma más elegante y eficiente de hacer lo que quiero.



Podrías calcular cuántos milisegundos faltan desde la hora actual hasta
la hora deseada, y hacer un Thread.Sleep(milisegundos).


Respuesta Responder a este mensaje
#3 Alberto Poblacion
19/09/2007 - 13:24 | Informe spam
"Aurelio Martínez Corchano" wrote in message
news:%23lOAfuq%
Pero seguro que no hay un método que no sea tan manual?



No es demasiado manual. Lo puedes dejar metido dentro de una subrutina
con una sola linea:

private void PausarHastaLas(DateTime hora)
{
System.Threading.Thread.Sleep(((TimeSpan)hora-DateTime.Now).TotalMilliseconds);
}
Respuesta Responder a este mensaje
#4 RFOG
19/09/2007 - 13:24 | Informe spam
On Wed, 19 Sep 2007 12:55:38 +0200, Aurelio Martínez Corchano
wrote:

Gracias Alberto, es una buena idea.

Pero seguro que no hay un método que no sea tan manual?





Otra:
Programa el porgramador de tareas de Windows y lanza un ejecutable en
lugar de un proceso.

Otra más:
Ten un hilo como "manejador de procesos", que despierte y acueste a los
hilos según sea necesario.

A mi, aparte de la de Alberto (que considero la más adecuada si sólo se
trata de un hilo), no se me ocurren más.

De todos modos no te vayas a pensar que Windows lo hace de otra manera...
Los microprocesadores no suelen tener schedulers para eso.
Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
Demasiada capacidad es peor que la incapacidad.
Respuesta Responder a este mensaje
#5 Alberto Poblacion
19/09/2007 - 13:29 | Informe spam
En un mensaje anterior dije:

System.Threading.Thread.Sleep(((TimeSpan)hora-DateTime.Now).TotalMilliseconds);



Perdón, creo que me faltan unos paréntesis:

System.Threading.Thread.Sleep(((TimeSpan)(hora-DateTime.Now)).TotalMilliseconds);
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida