PDA

Ver la Versión Completa : Evitar los timers


zugazua2001
16-06-2005, 06:11:12
Hola en mi aplicacion presento varias fotos que se van cambiando mediante unos timers.
La aplicacion se me pone muy lenta, esto lo observo cuando abro los menues y me muevo por las distintas opciones.
Queria saber como puedo hacer para evitar que se ponga lenta la aplicacion.
Gracias por todo y saludos.

Lepe
16-06-2005, 09:22:58
Si el intervalo del timer es muy pequeño (milisegundos) puede que esté agobiando al resto del programa, en ese caso, en el evento OnTimer, añade un Application.ProcessMessages.

Espero te ayude.

zugazua2001
16-06-2005, 19:15:34
Hola probe lo que me dijistes y no encontre diferencia.
Muchas gracias;

Casimiro Notevi
16-06-2005, 20:59:21
Prueba a cambiar los timers, el que trae delphi no es muy efectivo, te aconsejo que pruebes el que trae las RX (http://sourceforge.net/projects/rxlib/)
Es un timer "multihilo" que no consume recursos apenas y es muchísimo más exacto que el de delphi.

Mick
16-06-2005, 23:07:08
Lo mas probable es que el codigo que se ejecuta dentro de esos timers necesita mucha CPU o mucho movimiento de datos/imagenes desde la memoria ram o disco hacia la memoria de la tarjeta grafica.
Como se comenta poniendo el timer en un Thread podria hacer que mejore la respuesta del programa, a costa eso si de que el proceso que muestra las fotos se ralentice ya que el microprocesador es uno solo , y solo puede hacer una cosa a la vez.
Otro problema es que si efectivamente ese proceso lo que hace principalmente es dibujar imagenes en la pantalla, un thread aparte no tendria porque resolver el problema debido a que dentro de una misma aplicacion solo un proceso a la vez (normalmente el principal con el uso de synchronize) puede dibujar en la pantalla, de modo que si el codigo del timer esta dibujando esas imagenes, los menus, butones etc, y otros elementos graficos del programa no pueden refrescarse o redibujarse hasta que el proceso del timer acabe de dibujar.
En definitiva yo haria las dos siguiente cosas:
-Comprobar la velocidad del timer , puede estar demasiado rapido.
-Comprobar el consumo de cpu del proceso de dibujado, que es donde seguramente estara el problema, en este caso solo se pueden hacer dos cosas, o poner una cpu mas rapida u optimizar ese codigo para que haga el mismo trabajo en menos tiempo (usando menos cpu).

Saludos

Lepe
17-06-2005, 11:11:55
Acabo de recordar un detalle, creo que importante, Un menú tapará la imagen de fondo cuando lo despliegas y al moverte por los menus, hace que se redibuje la imagen de fondo con lo cual, el timer y el propio menú está duplicando las veces que se redibuje la imagen de fondo.

En este contexto, quitaría la imagen de fondo :(

Un saludo