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 26-06-2013
mosco mosco is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 20
Poder: 0
mosco Va por buen camino
Espera larga en bucle while

¿Se puede estar mucho tiempo en un bucle while a la espera?.
Lo he probado y el programa se cuelga.

Necesito esperar cerca de un minuto a que se cumpla una condición y luego seguir ejecutando el codigo.

¿Hay alguna forma simple de hacerlo?.

Saludos.
Responder Con Cita
  #2  
Antiguo 26-06-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Utiliza un TTimer.
De esa forma además no bloquearás el programa.

Le asignas el Interval a 60000, lo activas y cuando pasen 60 segundos "saltará" el evento OnTimer. Ahí puedes programar lo que necesites.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 26-06-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mosco.

Estoy de acuerdo con Neftali, es la elección más apropiada.

Ahora, si por algún motivo necesitas "congelar" la aplicacion por x tiempo podes hacer:
Código Delphi [-]
procedure WaitMinute(Lapso: Single);
var
  t1, t2: TTime;
begin
  t1  := Time;
  while (t2-t1)*1440 <= Lapso do
    t2 := Time;
end;

Llamadas:
Código Delphi [-]
begin
   WaitMinute(1); // 1 min.
   WaitMinute(.5); // 30 seg.
   ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 26-06-2013
mosco mosco is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 20
Poder: 0
mosco Va por buen camino
Muchas gracias a ambos. Me ha solucionado muchisimo.

Saludos.
Responder Con Cita
  #5  
Antiguo 27-06-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
mosco,

Cita:
Empezado por mosco
...¿Se puede estar mucho tiempo en un bucle while a la espera?...Lo he probado y el programa se cuelga...
En términos absolutos Si, en términos relativos depende de los requerimientos de la aplicación.

Como se menciono en el Msg #2 el uso del control TTimer permite de forma eficiente programar la ejecución de tareas en un intervalo de tiempo determinado, sin embargo también es posible hacerlo mediante una técnica denominada Espera Activa.

Revisa este código:
Código Delphi [-]
procedure WaitInterval(Lapse : LongWord);
var
   Start, Stop : Cardinal;

begin

   Start := GetTickCount;
   Repeat
      Stop := GetTickCount;
      Application.ProcessMessages;
      Sleep(10); // Evita el alto consumo de CPU por la técnica de Espera Activa.
   until (Stop - Start) >= Lapse;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin

   WaitInterval(60000);

   // El código que se requiera ejecutar luego de haber transcurrido un lapso de 60000 ms = 1 min, Ejm: ShowMessage.
   ShowMessage('Fin de WaitInterval');

end;
El código anterior permite ejecutar un proceso luego de haber transcurrido 1 minuto sin bloquear la aplicación, puede ser útil como complemento del Procedure Sleep.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 27-06-2013 a las 03:31:39.
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
¿Sentencia sql muy larga? ancara MySQL 6 28-06-2007 17:54:24
URL demasiado larga halizia PHP 3 20-12-2006 14:37:38
Consulta muy larga ElDioni SQL 4 22-07-2005 18:32:05
bucle dentro de un bucle Cosgaya Varios 2 06-06-2005 07:05:16
Delphi Pack 2.0 Una larga Espera Andree DelphiPACK 1 17-06-2004 16:46:40


La franja horaria es GMT +2. Ahora son las 12:11:45.


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