Ver Mensaje Individual
  #5  
Antiguo 27-06-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 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