/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Como medir tiempos con C con precisión

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
juquiman



Registrado: 02 Oct 2004
Mensajes: 1

MensajePublicado: 03/10/2004 7:26 am
Título: Como medir tiempos con C con precisión

Enviado por Juquiman el día 3 de octubre de 2004

Estoy elaborando un código, en el que he de medir cuanto tiempo se emplea en realizar diversas tareas.

Utilizo la función clock

inicioSimulacion=clock();
...
...
...
...
...
finSimulacion=clock();
tiempo=(finSimulacion-inicioSimulacion)/(double)CLOCKS_PER_SEC;

Me da problemas ya que no me hace mediciones con demasiada precisión (orden de microsegundos) y una de las condiciones marcadas es la de que el código ha de seguir el estandar ANSI para poder ser ejecutado tanto en linux como en windows.

¿Alguien me puede decir de alguna función con la que poder obtener dicha precisión?

Muchas gracias
Volver arriba
quique



Registrado: 30 Mar 2004
Mensajes: 720
Ubicación: Por ahí

MensajePublicado: 05/10/2004 1:46 am
Título:

Hasta donde yo se, creo que no hay ninguna función ANSI C que te da el tiempo en microsegundos.

La razón es para tener que dicho valor, depende mucho del microprocesador utilizado, así como del sistema operativo, por lo que la portabilidad sería muy baja. Cada compilador tiene sus propias funciones que dependen del micro utilizado.

Siento no poderte ayudar más.

Salu2
Volver arriba
alp



Registrado: 12 Abr 2004
Mensajes: 413

MensajePublicado: 05/10/2004 9:51 am
Título:

Hola.

En unix tienes la función gettimeofday(), que utiliza una precisión de microsegundos. El problema de utilizar esta función y clock() es que su precisión dependerá de la carga del sistema. Si hay muchos procesos en ejecución, nuestro programa tardará más en ejecutarse.

Puedes utilizar la función times() que te da el tiempo real de CPU en modo usuario, modo supervisor, etc.

El problema es que estas funciones no están disponibles en windows. Al menos, Dev-Cpp no las tiene ni aparecen en MSDN.

Para windows, puedes utilizar GetProcessTimes() que es parecida a times.

La medida con clock() es la única que he encontrado que puedes utilizar en los dos sistemas.

Puedes intentar jugar con los valores que te devuelve clock(). Si clock() devuelve los ticks de reloj por segundo, si lo divides entre un millón, tendrás el valor de ticks de reloj por microsegundo. Con la constante CLOCKS_PER_SEC haríamos lo mismo. El problema estaría en poder comprobar si la precisión es suficiente para realizar estos cálculos. No se... es una idea.

Un saludo.
Volver arriba
Yahoo Messenger
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com