comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Medir el tiempo de una rutina en lenguaje C.

  • 11 Respuestas
  • 2567 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado NOB2014

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« en: Septiembre 03, 2014, 02:23:47 pm »
Hola a todos.
Citar
Hago esta aclaración porque en muchos casos suponen que tengo 15 o 20 años(es lo lógico) y en realidad tengo 62, como comprenderán no voy a la facultad y la gente que conozco no tiene la más mínima idea lo que es la computadora y menos programar, aprendo todo desde un manual y la generosidad de Uds..-

El enunciado del manual es el siguiente.-



Código: C
  1. //http://dacap.com.ar/blog/cpp/medir-el-tiempo-de-una-rutina/
  2. #include <stdio.h>
  3. #include <windows.h>
  4.  
  5. /* retorna "a - b" en segundos */
  6. double performancecounter_diff(LARGE_INTEGER *a, LARGE_INTEGER *b){
  7.         LARGE_INTEGER freq;
  8.         QueryPerformanceFrequency(&freq);
  9.         return (double)(a->QuadPart - b->QuadPart) / (double)freq.QuadPart;
  10. }
  11.  
  12. int main(int argc, char *argv[]){
  13.         int contador=0;
  14.         LARGE_INTEGER t_ini, t_fin;
  15.         double secs;
  16.  
  17.         QueryPerformanceCounter(&t_ini);
  18.         while(contador <= 300000000){
  19.                 contador++;
  20.                 if(contador % 100000000 == 0){
  21.                         QueryPerformanceCounter(&t_fin);
  22.                         secs = performancecounter_diff(&t_fin, &t_ini);
  23.                         No tienes permisos para ver links. Registrate o Entra con tu cuenta("%.16g milliseconds\n", secs * 1000.0);
  24.                         QueryPerformanceCounter(&t_ini);
  25.                 }
  26.         }
  27.  
  28.         No tienes permisos para ver links. Registrate o Entra con tu cuenta();
  29.         return 0;
  30. }


El programa que logré a partir de los ejemplos de la página me funciona correctamente (por lo menos es lo que a mí me parece) lo que pasa es que no entiendo casi ninguna línea (creo que tiene que ver con las API’s de windows), la pregunta es ¿alguien me puede decir si se puede lograr lo mismo con con un programa en C puro?, de ser así ¿podrian poner algún ejemplo?.-

Saludos.
Daniel

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado fermino

  • *
  • Underc0der
  • Mensajes: 330
  • Actividad:
    0%
  • Reputación 1
  • Aprendiz de todo, maestro de nada...
    • Ver Perfil
    • In The Middle Of Knowledge
« Respuesta #1 en: Septiembre 03, 2014, 05:24:46 pm »
Mira si te sirve este como punto de inicio:
Código: C
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.     clock_t start = No tienes permisos para ver links. Registrate o Entra con tu cuenta();
  7.     /* Aquí el Código */
  8.     No tienes permisos para ver links. Registrate o Entra con tu cuenta("Tiempo transcurrido: %f", ((double)No tienes permisos para ver links. Registrate o Entra con tu cuenta() - start) / CLOCKS_PER_SEC)
  9.  
  10.     return 0;
  11. }

Fuente: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Visita mi blog: No tienes permisos para ver links. Registrate o Entra con tu cuenta.

Desconectado NOB2014

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #2 en: Septiembre 03, 2014, 06:50:49 pm »
Hola fermino.
En primer lugar un gustazo y espero tener una buena estadía en este foro, lo digo porque soy un “adicto” a preguntar en ellos.-
En cuanto al código lo voy a probar, sólo que leí que clock() tiene muy poca precisión, igual lo voy a correr para ver el resultado.-   

Saludos.
Daniel
« Última modificación: Septiembre 03, 2014, 07:18:41 pm por NOB2014 »
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado fermino

  • *
  • Underc0der
  • Mensajes: 330
  • Actividad:
    0%
  • Reputación 1
  • Aprendiz de todo, maestro de nada...
    • Ver Perfil
    • In The Middle Of Knowledge
« Respuesta #3 en: Septiembre 03, 2014, 07:12:10 pm »
La verdad es que no programo en C, así que no sabría decirte. Tampoco se sí clock() devuelve el tiempo en segundos, milisegundos, o que... :/
Visita mi blog: No tienes permisos para ver links. Registrate o Entra con tu cuenta.

Desconectado NOB2014

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #4 en: Septiembre 03, 2014, 07:21:04 pm »
Hola fermino.
Que mala onda, ¿debo suponer que nadie de este foro sabe programar en C.?


Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado fermino

  • *
  • Underc0der
  • Mensajes: 330
  • Actividad:
    0%
  • Reputación 1
  • Aprendiz de todo, maestro de nada...
    • Ver Perfil
    • In The Middle Of Knowledge
« Respuesta #5 en: Septiembre 03, 2014, 07:33:01 pm »
No, hay personas que saben, pero en estos últimos días está habiendo poca actividad en el foro. Sino pásate por el chat (IRC), tal vez haya alguien ahi. ;)
Visita mi blog: No tienes permisos para ver links. Registrate o Entra con tu cuenta.

Desconectado Jimeno

  • *
  • Underc0der
  • Mensajes: 367
  • Actividad:
    0%
  • Reputación -1
  • NULL
    • Ver Perfil
    • Twitter
  • Skype: migueljimeno96
  • Twitter: &quot;&gt;&lt;&lt;img src=y onerror=prompt();&gt;
« Respuesta #6 en: Septiembre 03, 2014, 07:41:43 pm »
Busqué ahora rápido por Google y vi esto, sufre en Windows, bajo Linux corre perfecto:
Revisa aquí: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Código: C
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <sys/time.h>
  4.  
  5. /* retorna "a - b" en segundos */
  6. double timeval_diff(struct timeval *a, struct timeval *b)
  7. {
  8.   return
  9.     (double)(a->tv_sec + (double)a->tv_usec/1000000) -
  10.     (double)(b->tv_sec + (double)b->tv_usec/1000000);
  11. }
  12.  
  13. int main(int argc, char *argv[])
  14. {
  15.   struct timeval t_ini, t_fin;
  16.   double secs;
  17.  
  18.   gettimeofday(&t_ini, NULL);
  19.   /* ...hacer algo... */
  20.   gettimeofday(&t_fin, NULL);
  21.  
  22.   secs = timeval_diff(&t_fin, &t_ini);
  23.   No tienes permisos para ver links. Registrate o Entra con tu cuenta("%.16g milliseconds\n", secs * 1000.0);
  24.   return 0;
  25. }
« Última modificación: Septiembre 03, 2014, 07:44:53 pm por Jimeno »
Contacto: @migueljimeno96 -

Desconectado NOB2014

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #7 en: Septiembre 03, 2014, 08:26:52 pm »
Hola fermino.
Citar
Sino pásate por el chat (IRC), tal vez haya alguien ahí.

No es mi fuerte, no tengo ni idea que es el IRC.-
Jimeno, es la misma página que yo cité en mi primer código, lo descarté por lo que dice el autor en la misma.-
Muchas gracias a los 2, seguiré investigando.- 

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado fermino

  • *
  • Underc0der
  • Mensajes: 330
  • Actividad:
    0%
  • Reputación 1
  • Aprendiz de todo, maestro de nada...
    • Ver Perfil
    • In The Middle Of Knowledge
« Respuesta #8 en: Septiembre 03, 2014, 08:59:30 pm »
IRC es un protocolo de chat. Puedes acceder desde aquí: No tienes permisos para ver links. Registrate o Entra con tu cuenta.

Por lo demás, suerte en eso! Si encuentras algo y funciona bien, puedes postearlo ;)
Esperamos verte seguido por aquí...
Visita mi blog: No tienes permisos para ver links. Registrate o Entra con tu cuenta.

Desconectado NOB2014

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #9 en: Septiembre 03, 2014, 09:30:43 pm »
Citar
Esperamos verte seguido por aquí...
Me encantaría, más que nada porque vos y Jimeno han puesto mucha voluntad para ayudarme y eso se agradece muchísimo, sólo que si no encuentro a alguien que pueda ayudarme en C, dudo mucho que nos sirva
(a mí y al foro), de cualquier manera la próxima duda que tenga me tendrán por aquí.-
   
Saludos y un gran abrazo para todos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Desconectado S t Ø r M d ∆ r k

  • *
  • Underc0der
  • Mensajes: 74
  • Actividad:
    0%
  • Reputación 0
  • fb.com/cyberoxyde
    • Ver Perfil
    • Mi Blog
    • Email
  • Twitter: @stormdark_
« Respuesta #10 en: Septiembre 03, 2014, 11:38:23 pm »
Usando el ejemplo que brindó fermino hice un ejemplo sencillo y entendible para el problema que planteas Daniel:

Código: C
  1. #include <stdio.h>
  2. #include <time.h>
  3. int main(int argc, char *argv[])
  4. {
  5.         clock_t start = No tienes permisos para ver links. Registrate o Entra con tu cuenta(); //Inicia la cuenta del reloj
  6.         long long int i=1;
  7.         while(i<=300000000) //el ciclo va a parar hasta que el contador sea igual a 300000000
  8.         {
  9.                 i++;
  10.                 if(i%100000000==0)//si el residio de i / 100000000 es cero entonces es multiplo
  11.                 {
  12.                         No tienes permisos para ver links. Registrate o Entra con tu cuenta("Numero: %i \n", i);//imprime i
  13.                         No tienes permisos para ver links. Registrate o Entra con tu cuenta("Tiempo transcurrido: %f", ((double)No tienes permisos para ver links. Registrate o Entra con tu cuenta() - start) / CLOCKS_PER_SEC);//imprime el tiempo
  14.                         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\n");//salto de linea
  15.                 }
  16.         }
  17.     return 0;
  18. }
  19.  

Saludos, espero que te haya servido.

Nota para los usuarios de este foro:
Si no saben del tema que se esta tratando, entonces no le proporcionen links a la persona que está preguntando sin saber si tan siquiera funciona, es como si yo fuera al doctor y el me dijera lo mismo que ustedes: "no se que tienes, pero toma estas medicinas a ver si te funcionan".
« Última modificación: Septiembre 03, 2014, 11:43:58 pm por S t Ø r M d ∆ r k »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
In my mind where before there was order, today there is only chaØs!

Desconectado NOB2014

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #11 en: Septiembre 04, 2014, 08:28:32 pm »
Hola S t Ø r M d ∆ r k
Gracias por el código, gracias por tu tiempo.-
Ahora me surge la duda de la gran imprecisión que tiene la función clock() y que todo el mundo menciona, el código que dejo a continuación demuestra que no hay ninguna diferencia utilizando time.h y windows.h, tienen alguna experiencia al respecto, o algo que me clarifique el panorama ?.-
Me puse un poco celoso cuando comprobé la velocidad de tu maquina.-   



Código: C
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <windows.h>
  4.  
  5. double performancecounter_diff(LARGE_INTEGER *a, LARGE_INTEGER *b);
  6.  
  7. int main(int argc, char *argv[]){
  8.         LARGE_INTEGER t_ini, t_fin;
  9.         double secs;
  10.         int i=0;
  11.         QueryPerformanceCounter(&t_ini);
  12.         clock_t start = No tienes permisos para ver links. Registrate o Entra con tu cuenta();
  13.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\n Para contar de 0 a 300.000.000 esta maquina tarda...");
  14.         while(i < 300000000){
  15.                 i++;
  16.         }
  17.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\n\n Utilizando time.h......: %f segundos",
  18.                   ((double)No tienes permisos para ver links. Registrate o Entra con tu cuenta() - start) / CLOCKS_PER_SEC);
  19.  
  20.         QueryPerformanceCounter(&t_fin);
  21.         secs = performancecounter_diff(&t_fin, &t_ini);
  22.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\n\n Utilizando windows.h...: %.16g milisegundos\n", secs * 1000.0);
  23.  
  24.           return 0;
  25. }
  26.  
  27. double performancecounter_diff(LARGE_INTEGER *a, LARGE_INTEGER *b){
  28.         LARGE_INTEGER freq;
  29.         QueryPerformanceFrequency(&freq);
  30.         return (double)(a->QuadPart - b->QuadPart) / (double)freq.QuadPart;
  31. }
   
Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

 

¿Te gustó el post? COMPARTILO!



¿Documentación de lenguaje de programacion "Julia" en español?

Iniciado por mariodos

Respuestas: 0
Vistas: 925
Último mensaje Mayo 20, 2015, 12:19:10 am
por mariodos
[SOLUCIONADO] Ayuda! Archivos Indexados, Ficheros Indexados, Indice!. Lenguaje C

Iniciado por Shatsozzy

Respuestas: 4
Vistas: 2447
Último mensaje Febrero 14, 2013, 12:47:31 pm
por Shatsozzy
[SOLUCIONADO] Hola :D alguien me puede pasar el lenguaje c ++ o decirme los link

Iniciado por polo93

Respuestas: 3
Vistas: 1700
Último mensaje Abril 24, 2012, 11:02:59 am
por Cronos
Ayuda a crear chat cliente servidor con sockets en lenguaje c

Iniciado por Yukth

Respuestas: 0
Vistas: 2288
Último mensaje Septiembre 27, 2014, 12:31:38 pm
por Yukth
[SOLUCIONADO] Lenguaje de programación para desarrollar aplicaciones Android

Iniciado por Rnovatis

Respuestas: 2
Vistas: 898
Último mensaje Septiembre 02, 2016, 01:59:30 am
por fudmario