Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Yoel Alejandro en 9 Marzo 2014, 17:34 pm



Título: No funciona timer en Linux
Publicado por: Yoel Alejandro en 9 Marzo 2014, 17:34 pm
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?

Código
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. int main( ) {
  5.  
  6. clock_t t1, t2;
  7.  
  8. t1 = clock();
  9. getchar();
  10. t2 = clock();
  11. printf("Han transcurrido %.2lf s\n", (double)(t2 - t1)/CLOCKS_PER_SEC );
  12.  
  13. }


Título: Re: No funciona timer en Linux
Publicado por: amchacon en 9 Marzo 2014, 17:36 pm
Lo que mide ahí son los ciclos de reloj, mientras tengas el programa en "pausa" no hay ciclos de reloj.


Título: Re: No funciona timer en Linux
Publicado por: Yoel Alejandro en 9 Marzo 2014, 23:45 pm
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:

Código
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. int main( ) {
  5.  
  6. clock_t t1, t2;
  7. int i, j, k;
  8.  
  9. t1 = clock();
  10. printf( "1 ... " );
  11.        fflush( stdout );
  12. do {
  13. t2 = clock();
  14. } while ( (double)(t2 - t1)/CLOCKS_PER_SEC < 3 );
  15. printf( "2" );
  16. }


Título: Re: No funciona timer en Linux
Publicado por: amchacon en 10 Marzo 2014, 00:01 am
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.