2009-05-15 14 views
6

Interesado en algo similar a JavaScript setTimeout en C en UNIX y Windows.C Rellamada del temporizador

Básicamente, quiero:

start_timer(&function_pointer, int time_in_secs) 

o lo más cerca que a medida que pueda conseguir.

También, algo similar a setInterval estaría bien (donde se llama a la devolución de llamada cada n segundos), pero que puede ser implementado usando setTimeout :)

+0

no puedo aceptar dos respuestas, y no tengo respuestas separadas para Unix y Windows. Podría usar SDL, pero las respuestas aquí están bien. Solo aceptaré el de Windows porque solo hay una persona que respondió esa parte. – singpolyma

Respuesta

8

SetTimer en Win32 con un TimerProc como la devolución de llamada.

/* calls TimerProc once every 60000 milliseconds */ 
SetTimer(NULL, 1, 60000, TimerProc); 
2

Para UNIX, man setitimer.

1

Parte de la información acerca de alarma() y setitimer() se puede encontrar here. Tenga en cuenta que la función upcall es un manejador de señal, por lo que está sujeto a todas las limitaciones y restricciones asociadas con los manejadores de señal, como se describe con gran detalle en here.

Como se indicó en el primer enlace, alarm() está basado en POSIX, setitimer() no lo es (aunque es más flexible).

+0

La especificación POSIX actual dice que setitimer() y getitimer() son obsoletos y pueden eliminarse en una edición futura. Los reemplazos recomendados son timer_gettime() y timer_settime(). –

+0

@Jonathan, tiene razón, parece que el documento glibc es incorrecto (o al menos engañoso) con respecto a setitimer()/getitimer() que no son interfaces POSIX. ¿Hay algo más nuevo que la versión 2004 de 1003.1 disponible en línea? Lo mejor que pude encontrar fue aquí: http://www.unix.org/single_unix_specification/. –

+0

Las especificaciones de base de Open Group, número 7 IEEE Std 1003.1 ™ -2008 en http://www.opengroup.org/onlinepubs/9699919799/toc.htm –

5

Es posible que desee probar el POSIX temporizadores, los timer_create y timer_settime, ya que le permite especificar una llamada función directamente sin necesidad de utilizar señales. Para obtener el temporizador expire sólo una vez (y no seguir repitiendo):

timer_settime: El valor de recarga de el temporizador se establece en el valor especificada por el miembro de it_interval valor. Cuando un temporizador está armado con it_interval distinto de cero, se especifica un temporizador periódico (o repetitivo).

Aquí es extensa documentación de la utilización de estos temporizadores con un buen ejemplo del Manual del Programador de Linux en kernel.org:

timer_create - create a POSIX per-process timer