Hola, preciso ayuda de los Linuxeros. Este sencillo código (que mide el tiempo transcurrido entre el inicio del programa y la pulsación de ENTER) no funciona como debe en Linux. En Windows lo probé y está Ok.
El problema es que clock() devuelve siempre cero (0), tanto para t1 como para t2, y por eso no mide el tiempo. ¿Qué es lo que le falta "ajustar" para que funcione en plataformas Linux y/ similares?
#include <stdio.h>
#include <time.h>
int main( ) {
clock_t t1, t2;
t1 = clock();
getchar();
t2 = clock();
printf("Han transcurrido %.2lf s\n", (double)(t2 - t1)/CLOCKS_PER_SEC );
}
Lo que mide ahí son los ciclos de reloj, mientras tengas el programa en "pausa" no hay ciclos de reloj.
Mmmm, entonces la implementación es diferente que en Windows. En Windows el tiempo sí transcurre a pesar de getchar(). Curioso (?!)
Probé este otro, que imprime "1 ... " y espera 3 segundos antes de imprimir "2". Éste sí funciona en Linux de la manera esperada:
#include <stdio.h>
#include <time.h>
int main( ) {
clock_t t1, t2;
int i, j, k;
t1 = clock();
printf( "1 ... " );
fflush( stdout );
do {
t2 = clock();
} while ( (double)(t2 - t1)/CLOCKS_PER_SEC < 3 );
printf( "2" );
}
Claro, porque ahí si hace ciclos de reloj. El programa está todo el rato comprobando y actualizando.
Lo de windows debe ser algún efecto lateral de su implementación, pero lo de linux es eso.