![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Hola FGarcia! Gracias por tu respuesta... Necesito una cantidad mayor de timers (sobre los 80) pero lo normal es que no estén simultáneamente en uso, aunque en un caso muy extremo y extraño si pudiesen estar activos. Por otra parte no necesito una exactitud muy eleveda. Estamos hablando del orden de minutos con lo que no me importa un segundo más o menos (q no creo q sea tanta la desviación).
Gracias!!! |
|
#2
|
||||
|
||||
|
En la página de Ians Marteens tienes una entrada "midiendo el tiempo con precisión" que va sobrado para tí.
En lugar de tener 80 timers, deberías seguir la filosofía de Ians: - "iniciar un timer" es simplemente coger en ese momento la cantidad de tiempo que lleva encendido el ordenador. - "Parar un timer" es volver a coger ese número y restarlo al anterior. La diferencia es el tiempo que ha tardado una tarea. Como ves no es exactamente un timer, pero lo importante de todo es que no tienes 80 timers en memoria, de hecho no tienes nada, sólo un par de llamadas a la API. (aunque no necesites precisión, te recomiendo el QueryPerformanceCounter(X) ![]() Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#3
|
|||
|
|||
|
Hola Lepe...
Gracias por tu aportación, pero no entiendo muy bien que es lo que me quieres decir... Según entiendo lo que me planteas es algo así como tener un sólo timer con un periodo determinado (digamos un segundo) y que cada vez que entre en su evento compruebe si debe actualizar un elemento. Sabrá si debe actualizar ese elemento si coincide digamos su variable MomentoActualizacion con el valor devuelto por QueryPerformanceCounter. ¿Es más o menos eso lo que me has querido decir? Corrígeme si me equivoco please... Salu2... |
|
#4
|
||||
|
||||
|
Sí, básicamente es eso.
Podrías utilizar un registro (o un objeto) por cada elemento que quieres dar de alta en tu aplicación, por ejemplo: Pero al hablar de "timers" y precisión me he ido por los cerros de úbeda. Es más fácil poner un solo timer de 1 minuto. Cuando quieras dar de alta un elemento: - asignas enMarcha a true para ese elemento. - inicio := now; // una llamada a la fecha y hora actual del sistema - Fin := inicio + intervalo; (intervalo expresados en días, por eso es un real, 1 segundo vendría a ser : 1 / (24 * 60 * 60)) En el evento OnTimer, captas la hora actual del sistema y la comparas con todo el array, así compruebas si tienes que actualizarlo o no. Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 23-10-2008 a las 20:02:25. |
|
#5
|
|||
|
|||
|
Otra pregunta ya por curiosidad...
¿Qué es lo que ocurriría si se utilizase un número muy elevado de timers? ¿Simplemente la aplicación no podría crearlos o es que los timers puede que no tuviesen precisión? ¿Alguien lo sabe? Gracias!!! |
|
#6
|
||||
|
||||
|
Interesante pregunta.
Además del obvio aumento de consumo de memoria y recursos (80 timers son 80 handles de memoria más), quizás "empezaran" a no ser precisos. Ten en cuenta que la aplicación sólo puede ejecutar una sola cosa al tiempo, si está procesando un evento de timer y llega otro, simplemente se añade a la cola de mensajes de la aplicación, para ir ejecutándolos en el orden de llegada. El último evento que llega, puede demorarse desde que se lanzó hasta que se ejecuta su código del evento OnTimer. Incluso producir efectos indeseados en la interfaz, por ejemplo, al ejecutarse muchos eventos de timers no se repinta la pantalla (recordemos que los eventos de repintados en windows tienen poca prioridad), y se verían textos no actualizados aún cuando en el timer se haya ordenado cambiar un caption de un label... o cosas por el estilo. Por otra parte está la lógica del programa, es mucho más fácil hacer una modificación (o depurar) si todo está centralizado, en lugar de tener 80 timers que administrar. Mentalmente no puedes saber cuando se ejecutarían esos timers, al estar centralizado puedes hacer una resta de fechas o usar SecondsBetween entre un timer y la hora actual para saber "cuanto tiempo le falta a ese timer para que se ejecute su código" Algunas veces es necesario descentralizar para ordenar el código, en este caso, creo que añade ventajas el tenerlo centralizado. Saludos curiosón ![]()
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#7
|
||||
|
||||
|
Saludos.
A mí entender, puedes ejecutar tanto timers como memoria tengas disponible si utilizas el recurso de los Thread (Hilos); lo que sí veo un tanto incomodo es la administración de los mismos al ser un elevado número de procesos.
__________________
Gracias, Rolphy Reyes |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Duda con un array de Timers | vejerf | OOP | 7 | 15-10-2008 16:02:07 |
| Cantidad de veces que se ejecuta una aplicación | efelix | OOP | 3 | 09-11-2006 17:23:55 |
| Duda sobre instalación de aplicación creada en Delphi | vick | Conexión con bases de datos | 6 | 19-12-2005 16:12:15 |
| Duda en utilizar 2 Timers para comunicacion paralelo | ibstk | Varios | 2 | 05-08-2004 03:59:26 |
| Duda sobre creacion de aplicación | CFPA86 | Varios | 1 | 05-09-2003 20:20:43 |
|