Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   detener procedimiento largo (https://www.clubdelphi.com/foros/showthread.php?t=59424)

emeceuy 26-08-2008 19:52:43

detener procedimiento largo
 
Hola, tengo una consulta "rara"... necesito poder detener un evento que se ejecuta al presionar un botón y es muy largo (dura al rededor de 6 minutos)... al apretar dicho botón comienzan a ejecutarse varias rutinas, procedimientos, funciones, etc, son unas cuantas, como les decía duran varios minutos. Para que no se cuelgue el programa y se puedan hacer algunas otras cosas o cambiar el cursor de lugar, etc, he puesto en varios lugares "application.procesmessage".

Así el programa funciona de maravillas, pero me gustaría tambien poder detenerlo al presionar un botón de cancelar o algo así...

Una posibilidad sería utilizar un flag boolean y activarlo al presionar cancelar, y chequear este flag que no esté seteado antes de entrar a cada funcion, el problema es que cada funcion tarda unos cuantos segundos, y no quiero tener que esperar tantos segundos para detener el ciclo, entonces esa forma no me sirve, e ir más hacia adentro de las funciones para hacer algo similar y "acortar" el tiempo ese, sería muy complicado, porque son funciones dentro de otras funciones. Espero ser claro, es dificil de explicar.

A alguien se le ocurre alguna idea? muchas gracias desde ya !

Adjunto un "esquema" del código:
Código Delphi [-]
procedure TfrmPrincipal.btnAnalizarClick(Sender: TObject);
begin
   if EST.Conectado then
      begin
         funcion1(...);
         funcion2(...);
         fDemora(...);
         procedimiento1(...);
         fDemora(...);
         funcion3(...);
         ... etc, etc
      end;
end;

coso 27-08-2008 11:10:28

Hola,
personalmente uso lo del flag que has comentado. Otra manera que se me ocurre, aunque algo complicada, es crear un hilo con esas funciones y si se pulsa cancelar, hacerle un kill al hilo.


La franja horaria es GMT +2. Ahora son las 02:57:53.

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