retardo de tiempo en C. usleep

retardo de tiempo en C. usleep

En lugar de dormir durante 20000 usegundos, duerma durante el tiempo restante hasta que desee volver a ejecutar, según la llamada a clock_gettime

Es decir:

usleep( lasttime+20000-now ); // But make sure you don't sleep when the result is negative

No es que su código tenga un problema, pero la llamada real para dormir, leer la hora, etc. lleva tiempo, y el sistema no puede dormir por la hora exacta de todos modos a menos que sea un múltiplo de su ciclo de reloj exacto


No se garantiza que las funciones de reposo en sistemas que no son en tiempo real duerman durante el período exacto especificado; en un sistema ocupado, el proceso se despertará solo cuando comience su segmento de tiempo. O, como dice la página del manual, "la actividad del sistema puede prolongar el sueño en una cantidad indeterminada".

La cantidad cercana a los 10 ms suena como el kern.hz la frecuencia se reduce a 100, como algunos recomiendan para configuraciones de VM.

La solución clásica para este problema es la que ofrece Ofir:en lugar de especificar un intervalo de sueño fijo, especifique el tiempo restante para dormir. En promedio, su ciclo se ejecutará cada 20 ms, que es lo que probablemente desee lograr.