Timer/TimerTask en C/C++

dagavi

Hola, iré al grano de la pregunta xD:

¿Conocéis algo que haga timers (en el sentido de planificar la ejecución de funciones) para C/C++? Algo similar a lo que se podría conseguir con alarm() y creo que setitimer() en UNIX o lo que en Java se puede hacer con un timer.schedule(TimerTask, date, periodo).

Para decirle: ejecuta esta función cada X tiempo (ej: cada segundo, o cada 500 ms).

Lo suyo sería que se pudieran programar diversos timers independientes (como en Java). He realizado la búsqueda "TimerTask C++" y veo que hay algunas clases que intentan imitarlo, pero desconozco de su son fiables y tal vez alguien de vosotros ya tenga experiencia con algo similar.

Algo que estaría bien es que no fuera dependiente de Linux (como lo sería si tuviera que trabajar con system calls + signals). Podría ser de librerías externas, he mirado en las Boost pero la clase Timer parece que es para realizar medidas, no para planificar código.

Soltrac

Puedes emularlo si no existe.

Crea un thread y al final de la ejecución pausalo por X ms y ya tienes tu timer hecho.

1 2 respuestas
Lecherito

#2 sé que no va de esto el hilo, pero, sabes de algún buen tutorial sobre threads? (Da igual inglés o español)

1 respuesta
dagavi

#3 Busca info sobre pthreads

No me lo he leído, pero por lo que ve por encima esto te puede ir bien, parece que tiene mucho código de ejemplo:

http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html
http://educa.di.unc.edu.ar/file.php/142/TemasProgramacion/PThreads/pthreads.html

#2 Esa es una opción que me he planteado, pero era por si ya existía algo implementado que diera más robustez / funcionalidades (cancelar ejecución, etc.)

Pero si, no parece tampoco muy complicado separarlo por completo, de hecho podría hacer la función que ejecuta el thread de forma que llame a otra función pasada como parámetro y, de esta forma, tener un código general de timer, en plan

while(/* algo que diga que acabe */) {
    func();
    /* sleep el tiempo que haga falta */
}
dr_Rouman

Yo haría un thread que itera sobre una lista / cola simplemente enlazada de punteros a funciones. Así fácilmente xD Además cada función que ejecutes debería ser un hilo para que no bloquee al que va mirando la lista / cola, o sea que para pthread te vienen muy bien los punteros a función.

Usuarios habituales

  • dr_Rouman
  • dagavi
  • Lecherito
  • Soltrac