aunque muchas implementaciones tienen la función time
devuelve la hora actual en segundos , no hay ninguna garantía de que cada aplicación lo hará (por ejemplo, algunos pueden volver milisegundos en lugar de segundos).Como tal, una solución más portátil es usar la función difftime
.
difftime
está garantizada por la norma C para devolver la diferencia en el tiempo en segundo entre dos time_t
valores. Como tal, podemos escribir una función portátil de retardo de tiempo que se ejecutará en todas las implementaciones compatibles del estándar C.
#include <time.h>
void delay(double dly){
/* save start time */
const time_t start = time(NULL);
time_t current;
do{
/* get current time */
time(¤t);
/* break loop when the requested number of seconds have elapsed */
}while(difftime(current, start) < dly);
}
Una advertencia con los time
y difftime
funciones es que la C estándar nunca se especifica una granularidad. La mayoría de las implementaciones tienen una granularidad de un segundo. Si bien esto está bien para retrasos que duran varios segundos, nuestra función de retardo puede esperar demasiado tiempo para retrasos que duran en un segundo.
Hay una alternativa estándar portátil C: la función clock
.
La función clock
devuelve mejor aproximación de la aplicación a tiempo de procesador utilizado por el programa desde el comienzo de una era definida por la implementación se refiere únicamente a la invocación del programa. Para determinar el tiempo en segundos, el valor devuelto por la función clock
se debe dividir por el valor de la macro CLOCKS_PER_SEC
.
La solución función clock
es bastante similar a nuestra solución time
función:
#include <time.h>
void delay(double dly){
/* save start clock tick */
const clock_t start = clock();
clock_t current;
do{
/* get current clock tick */
current = clock();
/* break loop when the requested number of seconds have elapsed */
}while((double)(current-start)/CLOCKS_PER_SEC < dly);
}
Hay una advertencia en este caso similar al de time
y difftime
: la granularidad de la función clock
se deja la implementación. Por ejemplo, las máquinas con valores de 32 bits para clock_t
con una resolución en microsegundos pueden terminar envolviendo el valor devuelto por clock
después de 2147 segundos (aproximadamente 36 minutos).
Como tal, puede utilizar el time
y difftime
implementación de la función de retardo de los retrasos que duran al menos un segundo y la implementación clock
de los retrasos que duran menos de un segundo .
Una última palabra de precaución: clock
tiempo vuelve procesador tiempo en lugar de calendario; clock
puede no corresponder con el tiempo real transcurrido (por ejemplo, si el proceso duerme).
Qué plataforma y sistema operativo? – detly