| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
juquiman
Registrado: 02 Oct 2004 Mensajes: 1
| Publicado: 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í
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |