[C con Clase] Consulta, función que se ejecuta cada cierto tiempo

Diego diegogeid en gmail.com
Vie Jun 14 15:24:24 CEST 2013


Hola. Gracias a todos por el tiempo.

José Luis, gracias por tu respuesta, es verdad que no es en tiempo real
pero 10uS para un procesador y un kernel actual no son un problema
(mientras no haya tareas hambriendas con mayor prioridad o menor nice). Los
temporizadores existen y de muchísima presición y la resolución que brinda
un microprocesador de este tipo esta sobrada.

Steven, gracias por tu respuesta, es verdad que GLUT no ofrece resolución
temporal y encima de ello los tiempos son muy grandes en comparación con el
que le pedimos (si quisiera lograrlo a 1mS no podría con GLUT, esto tiene
una explicación pero al caso dejó de ser importante). Probé mi rutina
mediante un bucle que corre en un nuevo thread y la función gettimeofday
contínuamente comparando si excedió el tiempo (solo para ver cuanto varía
según la capacidad de procesamiento) y si bien los tiempos son muy exactos
(probé con un mínimo de 10uS), la tarea queda hambrienta y utiliza el 100%
de un nucleo realizando verificaciones temporales como es lógico de
presuponer, el uso del CPU no es aceptable, no utilizo C++ sino C, donde no
existen tales bibliotecas.

El problema se reduce a dejar la tarea en espera hasta que transcurra un
determinado período de tiempo sin dejar al CPU hambriento, alguien sabe
como se logra? Supongo que, o bien existen funciones de C con este fin, o
API's del sistema operativo que ayuden a poner la tarea de fondo por un
tiempo, o interrupciones (y también seguramente bibliotecas creadas para
ello)

Saludos y gracias!
Diego

El 13 de junio de 2013 19:14, Davidson, Steven <srd4121 en njit.edu> escribió:

> Hola Diego,
>
> 2013/6/13 Diego <diegogeid en gmail.com>
>
>> Hola!
>>
>> Estoy haciendo algunas pruebas bajo Ubuntu y requiero que una función
>> bastante simple se ejecute con cierta periodicidad (por ejemplo, 10 uS si
>> se pudiera, sinó 100 uS o 1 mS) pero que sea preciso, es importante ya que
>> corresponde a simulación de parámetros físicos y la función debe correr en
>> tiempos discretos, marcados por un temporizador.
>>
>> Estoy usando glut y la función glutTimerFunc no tiene la resolución que
>> necesito ni se ejecuta con determinación (entiendo que no le da prioridad).
>>
>>
> GLUT no ofrece al resolución (precisión) temporal, ya que se basa en
> milisegundos. Te interesa usar funciones de mayor resolución. Posiblemente
> tengas que crear tu propio sistema de alarma o de cronometría. En Ubuntu,
> podrías intentar usar 'clock_gettime()' declarada en <time.h>. La otra
> opción es usar la biblioteca Boost, que es ahora estándar en C++; te
> interesa usar la clase 'time_duration', que puede guardar hasta la cantidad
> de nanosegundos.
>
>
> Espero que esto te ayude.
>
> Steven
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130614/134e4b5e/attachment.html>


Más información sobre la lista de distribución Cconclase