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

José Luis Torre joseluistorrehernandez en gmail.com
Vie Jun 14 17:00:31 CEST 2013


Tienes que poner un sleep, de este modo cae radicalmente el consumó de cpu
El 14/06/2013 16:46, "Diego" <diegogeid en gmail.com> escribió:

> 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
>>
>
>
> _______________________________________________
> 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/3db2f810/attachment.html>


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