Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Duda sobre la cantidad de timers que puede soportar una aplicación

Hola a todos...
Tengo una duda sobre el número de timers que se puede usar en una aplicación cualesquiera. Esto me surge ante la necesidad de tener que usar un timer por cada elemento que quiera dar de alta en mi aplicación ya que cada uno tiene que poderse actualizar según el tiempo que se le configure independientemente del resto.
¿Alguien sabe si el número de timers puede ser muy grande?
Muchas gracias!!!
Responder Con Cita
  #2  
Antiguo 22-10-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Hola!

Yo he usado hasta 15 timers en una aplicacion pero nunca de manera simultanea. Tal vez uno o dos simultaneos pero no mas, por otro lado recuerda que si tu aplicacion tiene necesidad de ser precisa en el tiempo los timers no tienen prioridad contra el resto de eventos del sistema por lo que deberas de adaptar algun componente de terceros.
__________________
ESTO ES UN FORO ... NO UN MÓVIL
¿Por qué no escribir de una manera comprensible para que los humanos lo podamos entender?
Responder Con Cita
  #3  
Antiguo 22-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
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!!!
Responder Con Cita
  #4  
Antiguo 22-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 23-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
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...
Responder Con Cita
  #6  
Antiguo 23-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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:
Código Delphi [-]
Type TElemento = record
   intervalo:Extended ; // el tiempo de tiempo que el usuario pone para actualizarse 
   inicio,  // cuando empezó a monitorizarse
   Fin :TDateTime ; // inicio + intervalo
   enMarcha:Boolean; // para saber si este crono está funcionando o no.
end;

elementos = array [0..79] of TElemento
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.

Código Delphi [-]
actual := now;
for i:= 0 to 79 do
  if elementos[i].enMarcha then
    if elementos[i].Fin < actual then
    // hay que actualizar
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 07:58:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi