![]() |
Medir tiempo de ejecución usando Timer (Problemas)
Hola a todos, les comento mi nuevo problema
(Trabajo con Windows2000 y Delphi6) Tengo en un procedimiento un proceso que tarda mucho en ejecutarse y necesito medir el tiempo de ejecución de dicho proceso. Para ello he añadido un TTimer y un par de procedimientos 'set' y 'end'. El primero se encarga de activar el Timer (Timer.Enabled=true) lo llamo justo antes de la llamada al proceso principal y el segundo justo cuando termina y se encarga de desactivar el Timer. He puesto unos label en el formulario de tal forma que cada segundo el evento del 'Timer' del timer me pinta el reloj, que avanza segundo a segundo. Todo esto funciona OK, el problema es cuando se llama al proceso principal que se apodera de la ejecución y el contador ¡no funciona! También he probado a iniciar el cronómetro por un botón y luego invocar al procedimiento, en cuanto que empieza el éste, el crono deja de funcionar. ¿Alguien sabe como hacer para que ambos procesos puedan funcionar y el contador me cuente el tiempo de cómputo del proceso principal? Adjunto un esquema de los procedimientos
Muchas gracias y un saludo. |
Hola, primero te recomiendo que utilices otro método para medir el tiempo, ya que el TTimer es muy impreciso y con tiempos tan largos peor todavia.. :mad:
En Torry podés encontrar varios Timer más precisos. Otra opción es utilizar la API GetTickCount, documentada acá. Esta función te devuelve la cantidad de tiempo (en milisegundos) que hace que la computadora esta encendida. Cuando iniciás el proceso guardas el valor que te devuelve GetTickCount y con un TTimer común (con un intervalo menor a 1 segundo) vas comparando el valor que te da GetTickCount con el de la variable y luego haces los cálculos y actualizás los labels. Cita:
EDITO: En lugar de usar un Thread, proba añadiendo Application.ProcessMessages en el proceso. Bytes!! |
Hola y gracias por tu respuesta.
Perdona, pero tengo poca experiencia con Delphi. ¿Podrías ponerme aunque sea a modo de esquema cómo puedo usar la función GetTickCount como comentas? Voy a documentarme sobre el TThread, ¿tendría que meter en una hebra ambos procesos? un saludo. |
Declará a Inicio y T_Actual como Extended;
El codigo que iría antes de iniciar el proceso seria éste:
Y éste es el evento OnTimer del Timer:
Cita:
Y si lo haces con Threads, tenés que poner en uno solo el proceso que vos manejas, ya que el TTimer crea un Thread propio. |
Con GetTickCount no necesitas un Timer. Aquí tienes un ejemplo sacado de Ians Marteens "midiendo el tiempo con precisión", adaptado por mí:
Ejemplo de uso:
Como el cronómetro usado es del ordenador, no importa si nuestra aplicación se queda congelada. Saludos |
Muchas gracias. Voy a intentar lo que me has explicado.
Ya te comento si tengo algún problema. Un saludo. |
Cita:
|
Yo solo utilizaria la funcion TimeGetTime (ideal para lo que necesitas)de la unidad MMSystem ,mas o menos de esta manera:
Edito:Esto es sin Timer y sin ninguna Clase extra.;) y es mas precisa que GetTickCount. |
Hola, te recomiendo que en varias partes de tu codigo, por ejemplo dentro de un bucle, uses la instruccion "Applicattion.proccessmessage;"
Esta instruccion hace que windows procese los mensajes pendientes y da el efecto que la aplicacion no se congela. Asi se pueden ejecutar las instrucciones del timer. Yo lo uso asi y me funciona. |
Cita:
Saludos... |
Aqtime es lo mejor que he visto y usado para medir tiempos de ejecucion y buscar cuellos de botella o procesos inecesariamente lentos.
Saluos |
Pues me alegro que este post, con cuatro años de vida nos haya ayudado tanto.
Saludos. |
retomando este hilo...
Hola a todos.
Si alguien llega acá buscando respuestas a "MEDIR EL TIEMPO CON PRECISIÓN" igual que llegué yo, les comento que encontré la solución en: http://arsenio-programa.blogspot.com...45989046264412 Sencillo, muy clarito, muy profesional, muy recomendable |
La franja horaria es GMT +2. Ahora son las 21:40:19. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi