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 16-03-2009
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
Mantener un timer ejecutandose cada minuto dentro de la aplicacion

Hola compañeros, estoy haciendo una aplicación que contiene un formulario de recordatorios, el caso es que quiero que me revise cada minuto la tabla de recordatorios para verificar si existe algun evento más próximo, si lo encuentra me lo muestra, no importando en qué formulario de la aplicación esté ubicado.

Alguien sabe cómo puedo hacer esto

Gracias y saludos
Responder Con Cita
  #2  
Antiguo 16-03-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Thumbs up

El componente Timer tiene una propiedad numerica que se llama Interval la cual define el intervalo de tiempo que el Timer debe ejecutar la accion de su unico evento OnTimer, esta propiedad esta dada en milisegundo, es decir
1 segundo=1000 Milisegundo.
Por ejemplo si quisiera se ejecute la accion cada minuto(aunque no es muy exacto pero vale) solo debo hacer la siguiente regla de tres simple:
Si 1 Segundo=1000 Milisegundo
entonces 60 segundos(osea un minuto) sera equivalente a X milisegundo:
Haciendo los calculos: X=60*1000;
Entonces concluimos que para que el Timer ejecute una determinada accion cada minuto, se debe poner su propiedad Interval=60000.
Saludos.....
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 14-04-2009 a las 21:26:44.
Responder Con Cita
  #3  
Antiguo 16-03-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Lightbulb Ojo

Se me olvido comentarles por que no es muy exacto la ejecucion de un timer
que se pone a un determinado intervalo:
La razon es, como un Timer es un hilo y por ende es un proceso para el Planificador del Sistema Operatimo por tal motivo recibe tambien un Quantum(tiempo de ejecusion) por estar trabajando en sistemas Operativos multitarea y multiproceso, puede ocurrir el caso que nuestro Timer ya le tocara en tiempo real la ejecucion de su evento OnTimer pero el Sistema operativo no le ha dado Quantum (no es su turno)es decir otro proceso esta haciendo el uso de la CPU y ya cuando le toca su turno se retraso en el tiempo real que debiera realizar su evento.
Es por ese motivo que se retrasaria en puequeños nanosegundos,milisegundos (claro en intervalos pequeños no se siente mucho la diferencia)su ejecucion que a la larga seria horas y esto se complica mucho mas si tenemos muchos programas habiertos.
Edito: Aqui tienen algo para profundizar el tema
Espero haberme explicado.....
Abrazos a todos...
RGS
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 16-03-2009 a las 23:28:54.
Responder Con Cita
  #4  
Antiguo 17-03-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hombre, entiendo tu preocupación por la exactitud y es bueno que lo aclares, pero no creo que unos cuantos nanosegundos afecten para el recordatorio de una cita. Y es que no me queda claro por qué comentas que, a la larga la diferencia sería de horas. No creo que esto afecte para el problema en cuestión. El timer se activará, más o menos, cada minuto, y se reiniciará la cuenta, con lo cual no importan ya los milisegundos acumulados hasta el momento.

¿O hay algo que no estoy viendo?

// Saludos
Responder Con Cita
  #5  
Antiguo 17-03-2009
Avatar de krlox31416
krlox31416 krlox31416 is offline
Miembro
 
Registrado: jun 2008
Ubicación: San Juan del Río, Querétaro, México
Posts: 75
Poder: 16
krlox31416 Va por buen camino
tal vez si te hicieras un procedure...

sip...

a lo mejor si hechas a andar un procedimiento se resuelve tu problema...

si utilizas los milisegundos checa en la ayuda que trae delphi...

y veras...

oarece que la abreviatura que utiliza es msecs...

haber si en algo te sirve este procedimiento:
Código Delphi [-]
procedure Delay(msecs:integer);
 var
    FirstTickCount:longint;
 begin
      FirstTickCount:=GetTickCount;
      repeat
            Application.ProcessMessages;
      until ((GetTickCount-FirstTickCount) >= Longint(msecs));
 end;

y la mandas llamar asi en milisegundos:

Código Delphi [-]

procedure TForm2.ButtonClick(Sender: TObject);
begin
Delay(2000);  //lo que va entre parentesis son los segundos en mi caso son 2 segundos los que neceito... ya dependera de ti tal vez con ciclos ajustarla...
end;

sele pues y espero y te sirva!!!

saludos !!!
__________________
el cielo me dio un cariño sin merecerlo... chimikuilo!!!

Última edición por krlox31416 fecha: 17-03-2009 a las 05:00:23. Razón: me faltava una h al
Responder Con Cita
  #6  
Antiguo 17-03-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Lightbulb

Cita:
Hombre, entiendo tu preocupación por la exactitud y es bueno que lo aclares, pero no creo que unos cuantos nanosegundos afecten para el recordatorio de una cita. Y es que no me queda claro por qué comentas que, a la larga la diferencia sería de horas. No creo que esto afecte para el problema en cuestión. El timer se activará, más o menos, cada minuto, y se reiniciará la cuenta, con lo cual no importan ya los milisegundos acumulados hasta el momento.
No estaba hablando de exactitud en realidad solo estaba haciendo una pequeña aclaracion,pero para ilustrarte como ejemplo base aunque ya fuera del tema El movimiento de rotacion de la tierra que aparentemente lo hace en 24 horas, pero en realidad no es asi sino que lo hace en:24,016438....horas, que en un año esa fraccion se hace 6 horas, osea que la tierra para dar una vuelta alrededor del sol tarda 365 dias y 6 horas mas (Movimiento de traslacion), es por eso que esas 6 horas de retrazo en el tiempo real del actual calendario gregoriano en 4 años se hacen 24 horas y por eso es necesario aumentar a febrero 1 dia mas, si los cientificos no se hubieran dado cuenta de eso, estariamos muy retrazado con respecto al tiempo real. No crees.
Ahora aplicando esa misma logica y conociendo un poquito del planificador del sistema operativo, deducimos que puede pasar lo mismo ,"claro ustedes diranpequeños nanosegundos",esos pequenas fraccionesde segundos se pueden convertir en horas como lo he ilustrado con el ejemplo.Quisas a algunos diran que importa eso, bueno eso es depende de lo que se quiera hacer,y depende de cada uno; yo solo quise hacer una pequeñita aclaracion.
Un gran saludos a todos....
RGS
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #7  
Antiguo 17-03-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
De lo que tú hablas es de una acumulación de errores, pero aquí eso no importa porque la cuenta se reinicia en cada vuelta del timer. Dicho de otra forma, el timer no se usa para llevar la cuenta de la hora de las citas sino para comparar, cada tanto tiempo, la hora actual del reloj de la computadora con la hora de las citas.

// Saludos
Responder Con Cita
  #8  
Antiguo 17-03-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Lightbulb Me temo que no me has entendido

Creo que no me has entendido amigo Roman, lo que trato o traté de explicar es como el planificador del sistema oprativo ,planifica que proceso va hacer uso de la CPU, es decir existe una politica de planificacion implementada en el sistema Operativo y como el Timer es un subproceso,igualmente es planificado como proceso, es decir resive un tiempo en el cual el planificador del sistema operativo le permite hacer uso de la CPU,y como explique anteriromente puede ocurrir que pasó su tiempo que realmente debiera ejecutar su accion por que hay otro proceso ocupando la CPU,claro en realidad a ciencia cierta el humano no lo puede persibir porque son nanosegundos o milisegundos,pero a la larga esas fracciones de tiempo suman,Desde luego en realidad existen muchas politicas de planificacion de procesos como ejemplo Round Robin , FIFO,LIFO,CFS,etc.Ahora habria que ver cuales de estos algoritmos utiliza Windows,pero eso ya otro tema.
Saludos....
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #9  
Antiguo 17-03-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Sí, sí, todo eso ya lo sé. Pero insisto en que no tiene nada que ver con lo que aquí hablamos. Repito: la acumulación de errores aquí no importa porque la cuenta se reinicia cada vez. Reiniciar es la palabra clave.

// Saludos
Responder Con Cita
  #10  
Antiguo 17-03-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Thumbs down

Cita:
Sí, sí, todo eso ya lo sé. Pero insisto en que no tiene nada que ver con lo que aquí hablamos. Repito: la acumulación de errores aquí no importa porque la cuenta se reinicia cada vez. Reiniciar es la palabra clave.
Si, eso es en el Timer, pero en realidad en el tiempo real no.
Es decir como el timer se reinicia internamente,entonces con relacion al tiempo real que debiera salir el aviso variaria en pequeñas fracciones de tiempo.
Desde luego no vamos a polemizar el tema, como algunos dicen ni si quiera el interesado se manifiesta.. .
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #11  
Antiguo 08-04-2009
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
Gracias por sus comentarios ..
Responder Con Cita
  #12  
Antiguo 12-04-2009
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
Problema al abrir la tabla dentro del timer

Hola chicos, ps implemente lo del timer cada segundo interval=1000 el k viene por defecto, pero el problema esk tengo que abrir la tabla y revisar si hay registros que coincidan con la fecha y hora actual, pero en donde implemento este timer es un formulario que tiene 4 check box, para k el usuario elija la opcion a la que kiere acceder, hago lo siguiente en el ontimer, pero no me permite acceder a ninguna opcion de los checkbox del formulario, no me keda mas k ponerle run-program reset.

Código Delphi [-]
var
fecha:string;
dia:string;
mes:string;
ano:string;
ff:string;
hr:string;
hor:string;
minu:integer;
min:string;
hrs:string;
mer:string;

begin
if(activar=1)then
begin
  hr:=TimeToStr(time());
  hrs:=copy(hr,1,2);
  min:=copy(hr,4,2);
  mer:=copy(hr,10,4);
  minu:=StrToInt(min);
  min:=IntToStr(minu);
  hor:=hrs+':'+min+' '+mer;

fecha:=DateToStr(date());
dia:=(copy(fecha,1,2));
mes:=(copy(fecha,4,2));
ano:=(copy(fecha,7,4));
ff:=ano+'-'+mes+'-'+dia;

ADOtblRec.Open; //Si esto lo pongo
while ADOtblRec.Eof<>True do
begin
//aqui no da problemas pero ps no revisa la tabla
if(ADOtblRec.Locate('Fecha',ff ,[loPartialKey,loCaseInsensitive]))and (ADOtblRec.Locate('Hora',hor ,[loPartialKey,loCaseInsensitive]))then
 begin

  if not(frmMostrarRec.Active=True)then
   frmMostrarRec.ShowModal;
  sndPlaySound('C:\WINDOWS\Media\chimes.wav',SND_NODEFAULT Or  SND_ASYNC);
  frmMostrarRec.RichRec.Lines.Add(ADOtblRec.FieldValues['Hora']);
  frmMostrarRec.RichRec.Lines.Add(ADOtblRec.FieldValues['Evento']);

  ADOtblRec.Edit;
  ADOtblRec.Delete;
  ADOtblRec.Refresh;

end;//locate
 end;//while
  ADOtblRec.Close;
end;//activar
end;//ppal

Espero k me puedan ayudar, ya le he intentado de varias maneras y nada..
Gracias
Responder Con Cita
  #13  
Antiguo 12-04-2009
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
¿donde avanzas o retrocedes de registros en el bucle while?

Si se encuentra un registro, se edita y se borra (no sé para qué pero bueno... eso es otra historia), el tema es que al borrar sí se avanza en los registros del adotable, pero si no entra en el locate, tienes un bucle infinito.

...creo!
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #14  
Antiguo 12-04-2009
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
mmm gracias por la idea, revisare ese detalle..
Responder Con Cita
  #15  
Antiguo 12-04-2009
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
Problema resuelto [Lepe], gracias, sí era eso, entraba a un bucle infinito
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
Mantener viva la aplicación HombreGordo Varios 9 04-11-2008 20:57:24
quitar icono un lado del reloj, sin desactivar aplicacion ejecutandose sakuragi Windows 7 16-01-2008 17:27:49
mantener mi aplicacion selecionada perico OOP 9 27-04-2006 01:16:29
esta ejecutandose una aplicacion en NT? jmbarrio API de Windows 5 13-01-2005 10:49:04
Aplicación ejecutándose en ordenador remoto Javi2 Varios 0 27-07-2004 14:29:56


La franja horaria es GMT +2. Ahora son las 20:27:48.


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