Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Cómo puedo interrumpir a Sleep()?

Estas en el tema de ¿Cómo puedo interrumpir a Sleep()? en el foro de C/C++ en Foros del Web. La cosa es muy simple, pero no doy con la solución. En mi programa tengo un código que se ejecuta cada x segundos. Entonces al ...
  #1 (permalink)  
Antiguo 27/11/2009, 04:19
 
Fecha de Ingreso: octubre-2006
Mensajes: 13
Antigüedad: 17 años, 6 meses
Puntos: 0
¿Cómo puedo interrumpir a Sleep()?

La cosa es muy simple, pero no doy con la solución. En mi programa tengo un código que se ejecuta cada x segundos. Entonces al terminar de ejecutarse uso un Sleep para que espere lo que falte hasta el próximo periodo. Pero esto hace que el programa se bloquee completamente. Me gustaría poner un botón para detener este ciclo en cualquier momento, para lo cual necesito algo que interrumpa a Sleep. ¿Cómo interrumpir a Sleep?
¡¡Gracias!!
Laura
  #2 (permalink)  
Antiguo 27/11/2009, 05:37
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: ¿Cómo puedo interrumpir a Sleep()?

Con un APC pero mejor usan un bucle con Sleep's de menor duracion.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 01/12/2009, 05:14
 
Fecha de Ingreso: octubre-2006
Mensajes: 13
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: ¿Cómo puedo interrumpir a Sleep()?

No entiendo cómo podría funcionar eso. Aunque en lugar de un sleep largo se hagan muchos sleep cortos en un buble, el 99,999% del tiempo el programa estará detenido en el sleep. Solo cada vez que entre al bucle en cada ciclo no lo estará, pero eso es un tiempo tan cortísimo que no da tiempo de pulsar ningún botón ni de hacer nada. Al final el efecto es el mismo, que el programa se bloquea y no puedo deterlo.
  #4 (permalink)  
Antiguo 01/12/2009, 05:21
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: ¿Cómo puedo interrumpir a Sleep()?

Usa mas de un hilo entonces ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 01/12/2009, 05:41
 
Fecha de Ingreso: octubre-2006
Mensajes: 13
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: ¿Cómo puedo interrumpir a Sleep()?

También lo he hecho, pero nada. He puesto el Sleep en un hilo pero da igual, lo ponga donde lo ponga el Sleep bloquea todo el programa. Ya estoy desesperada con esto, no sé qué hacer... Y parece una tontería.
  #6 (permalink)  
Antiguo 01/12/2009, 06:19
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: ¿Cómo puedo interrumpir a Sleep()?

No, eso es imposible, crea un hilo y hace el Sleep en el mismo, este no afectara al hilo principal donde podes hacer click en un boton sin problema.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 01/12/2009, 08:19
 
Fecha de Ingreso: octubre-2006
Mensajes: 13
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: ¿Cómo puedo interrumpir a Sleep()?

Pero si hago el Sleep en el hilo, el programa principal debe detenerse a esperar que el hilo termine el Sleep. Solo se me ocurre con

WaitForSingleObject(hHiloSleep, INFINITE);

Pero entonces estamos igual, se queda todo bloqueado esperando que el hilo termine y no me deja hacer nada.
  #8 (permalink)  
Antiguo 01/12/2009, 08:31
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: ¿Cómo puedo interrumpir a Sleep()?

El hilo principal no tiene que esperar nada, tiene que continuar su funcionamiento normal y haciendo el bucle en el nuevo hilo podes terminarlo, si clickea alguien el boton de cancelar por ejemplo, antes de que termine el tiempo de espera total.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:21.