C/Visual C - ¿Cómo puedo interrumpir a Sleep()?

 
Vista:

¿Cómo puedo interrumpir a Sleep()?

Publicado por Laura (6 intervenciones) el 27/11/2009 11:19:39
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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Cómo puedo interrumpir a Sleep()?

Publicado por Tom (619 intervenciones) el 30/11/2009 09:27:26
sleep() no ha sido diseñada para ser interrumpida. Deberías buscar otra solución.

En cualquier caso, si tienes suerte, quizás puedas interrumpirlo enviando una señal (prueba primero con SIGALRM).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Cómo puedo interrumpir a Sleep()?

Publicado por Aquiles (9 intervenciones) el 01/12/2009 11:34:00
// puedes hacer algo asi:
// ejemplo en consola.

#include "stdio.h"
#include "windows.h"
#define SHIFTED 0x8000

/* milisegundos : presionar 'escape' para abandonar */
void Sleep2( DWORD milisegundos )
{
int i = ( milisegundos / 2 ) + 1;

while( i-- )
{
if( GetKeyState( VK_ESCAPE ) & SHIFTED )
break;

Sleep( 1 );
}
}

/* main : */
int main()
{
Sleep2( 5000 ); // 5 segundos....
return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Cómo puedo interrumpir a Sleep()?

Publicado por Laura (6 intervenciones) el 01/12/2009 13:26:21
Ya intenté algo así, pero no funciona porque pongas donde pongas el Sleep, se quedará todo bloqueado y no hay tiempo para pulsar un botón.
Gracias de todas maneras,
Laura
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Cómo puedo interrumpir a Sleep()?

Publicado por Aquiles (9 intervenciones) el 01/12/2009 14:34:09
// tienes que usar la funcion Sleep2 del ejemplo.
// copia esto en tu proyecto y llamalo asi:

// Sleep2( 5000 ); // al presionar escape termina...


#define SHIFTED 0x8000

/* milisegundos : presionar 'escape' para abandonar */
void Sleep2( DWORD milisegundos )
{
int i = ( milisegundos / 2 ) + 1;

while( i-- )
{
if( GetKeyState( VK_ESCAPE ) & SHIFTED )
break;

Sleep( 1 );
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar