Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2003
hogol hogol is offline
Miembro
 
Registrado: jul 2003
Posts: 62
Poder: 21
hogol Va por buen camino
Question Duda sobre timer

Hola a todos

Tengo una duda acerca del componente Timer y es la siguiente: Si el código que se procesa en el evento ontimer supera el tiempo definido en la propiedad interval la siguiente llamada a ontimer se pierde o se acumula hasta que se pueda procesar?
Un ejemplo:
Tengo un timer con un intervalo de ejecución de 5 segundos y el código que tengo en ontimer tarda 17 segundos en ejecutarse. Cuando haya terminado, se esperará al segundo 20 para volver a ejecutar el código o por el contrario se 'ha guardado' en algún sitio que tiene dos llamadas pendientes (las del los segundos 10 y 15) y ejecutará inmediatamente la primera de ellas?

Un saludo a todos
Hogol
Responder Con Cita
  #2  
Antiguo 19-12-2003
madriles madriles is offline
Miembro
 
Registrado: may 2003
Ubicación: madrid
Posts: 93
Poder: 22
madriles Va por buen camino
hola
perdona, pero no entiendo tu pregunta.
el timer no termina nunca ( salvo que pongas Enabled:=false, claro ).
es decir si tu pones que el timer se ejecute cada cinco segundos, eso es lo que hara,. ahora bien en el evento ontimer es donde tienes que aclarar bien lo que quieres que realize.
a ver si lo aclaro. el timer pasa por el segundo 5 y mira si tiene que hacer algo (tiene un codigo ? ..no?...pasa olimpicamente )
llega al 10 y repite.....etc, etc.
si tu en el interval le pones que te mire cada cinco segundos, es lo que va a hacer, asi si le dices por ejemplo:
if MiTiempo = 43 then close; (suponiendo que MiTiempo es una variable definida por ti) no te va a hacer ni caso porque pasa de 40 a 45
ahora si pones
if MiTiempo >= 43 then
begin
//pantalla bonita
miTiempo:=0;
end;
la cosa cambia.

no se si te he aclarado algo o te he liado mas. de todas maneras es preferible que aclares que es lo que quieres hacer, normalmente es mas facil contestar
un saludo
Responder Con Cita
  #3  
Antiguo 19-12-2003
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 21
Descendents Va por buen camino
Creo, que no se acumulan.

Es decir, uno pisa a otro.

No pisa al evento que en el momento se esta realizando, pero si pisa al siguiente evento.

Ejemplo:

llamas al evento 5 veces cada seguno lo llamas una vez.

se necesitan 5 seg y habran 5 llamadas.

Si esta en la 2ª llamada, y tardara 2 segundos ha hacer lo que tenga que hacer(Según código claro),acabara la 2ª llamada y realizara la 4º, es decir , la 4º no te pisa la 2ª(porque se estaba realizando, y no lo deja a medias), pero si la 3ª(como ni empezo, pues la pisa).

Esto es lo que creo, por alguna vez me encontrado con algun problema asi, y no se me ha acumulado nunca.

Pero ya te digo, no te lo puedo asegurar.

Saludos
Responder Con Cita
  #4  
Antiguo 19-12-2003
madriles madriles is offline
Miembro
 
Registrado: may 2003
Ubicación: madrid
Posts: 93
Poder: 22
madriles Va por buen camino
hola
por lo que te entiendo lo que sucede es que, como tienes que ejecutar una serie de intrucciones en un segundo, cuando va a la siguiente se ha pasado de tiempo.
esto lo puedes solucionar, segun las acciones a realizar, con, por ejemplo Refresh.
si por ejemplo tienes algo del tipo
Edit1.Text := Edit1.Text + '0';
tendrias que agregar
Edit1.Refresh;
para que se ejecutase, antes de la nueva lamada al timer.
de todas formas, ten en cuenta el valor del Timer, cambia el interval a tu conveniencia, por ejemplo a 200, para que le de tiempo a ejecutar las acciones.
de todas formas seria conveniente saber que es lo que pretendes conseguir, seria mas facil ayudarte
un saludo
Responder Con Cita
  #5  
Antiguo 19-12-2003
hogol hogol is offline
Miembro
 
Registrado: jul 2003
Posts: 62
Poder: 21
hogol Va por buen camino
Hola de nuevo

La duda que tengo es 'teorica', no se trata de ningún problema que me haya surgido al diseñar algun programa.
Lo que quiero saber es si las llamadas a ontimer se hacen siempre o solo cuando el propio código que hay en ontimer ya ha terminado.
Si fuera el primer caso eso significaría que, cuando el código de ontimer sea más lento que su intervalo de llamada dichas llamadas se irian acumulando en una especie de 'pila' esperando a poder realizarse.
Si fuera el segundo caso, las llamadas a ontimer que no se pudieran realizar porque la anterior llamada a ontimer no ha terminado sencillamente se ignoran.
Por lo que apunta descendents la respuesta correcta es la segunda, osea que no se acumulan sino que se machacan y en paz.
¿Alguien nos lo puede confirmar al 100 % ?

Saludos nuevamente
Hogol
Responder Con Cita
  #6  
Antiguo 28-04-2010
zurdosoft zurdosoft is offline
Miembro
 
Registrado: may 2005
Ubicación: Villa Maria, Cordoba, Argentina
Posts: 16
Poder: 0
zurdosoft Va por buen camino
Como lo uso

El evento del Timer se ejecuta si o si en el momento prefijado.
Para evitar que actue hay que deshabilitarlo dentro de el evento OnTimer:

procedure tForm1.Timer1(Sender:TObject);
begin
Timer1.Enabled:=false;
//Procesar aquí lo que sea
Timer1.Enabled:=true;
end;

De este modo se evita que el evento sea ejecutado mientras realizo el proceso.

Tarde pero a alguien le puede servir.

Saludos
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


La franja horaria es GMT +2. Ahora son las 00:58:46.


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