Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como parar un programa en ejecucion??? (https://www.clubdelphi.com/foros/showthread.php?t=10462)

damian2000 19-05-2004 23:25:39

Como parar un programa en ejecucion???
 
Hola, mi problema es que tengo un programa que realiza unas operaciones muy lentas dependiendo del tamaño de matrices que meta, vamos que cuando esta el programa calculando puede tirarse varios minutos ya que son varios bucles for anidados, la cosa es que me gustaria poder poner un boton del tipo cancelar, que pueda interrumpir la operacion en cualquier momento, esto siempre lo he hecho en c++ con la funcion kbhit() dentro de un while, pero aqui no veo la forma, y es que me da la impresion de que el programa se queda ahi calculando y no me deja dar ni al boton salir, alguna sugerencia?, gracias y salu2.

eduarcol 19-05-2004 23:33:15

Puedes colocar una variable de tipo flag que se active al presionar el boton salir, y en cada bucle del for mas interno validas si se activo si se activo paras el bucle y listo, yo lo haria asi no se si exista el equivalente a esa instruccion

__cadetill 19-05-2004 23:36:59

hola

Pues en Delphi has de hacerlo más o menos de la siguiente manera:

Código Delphi [-]
var
  Salir: boolean; // variable global al formulario

implementation

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  Salir := false;
  for i := 0 to 100000 do
  begin
    if Salir then Break;
    Application.ProcessMessages;
  end;
end;

procedure TForm1.SalirBucleClick(Sender: TObject);
begin
  Salir := true;
end;

Mas o menos

Espero te sirva

roman 19-05-2004 23:38:13

Además de lo que dice eduarcol habrá que agregar un Application.ProcessMessages en algún punto de cada ciclo para que se pueda procesar el click del botón.

// Saludos

eduarcol 19-05-2004 23:50:10

Cita:

Empezado por cadetill
hola

Pues en Delphi has de hacerlo más o menos de la siguiente manera:

Código Delphi [-]
var
  Salir: boolean; // variable global al formulario  = declarar una variable flag

Código Delphi [-]
procedure TForm1.SalirBucleClick(Sender: TObject);
begin
  Salir := true; //activarla al presionar 
end;

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  Salir := false;
  for i := 0 to 100000 do
  begin
    if Salir then Break; //Al final del ciclo mas interno si se activo salir del ciclo
    Application.ProcessMessages; 
  end;
end;



Mas o menos

Espero te sirva


Gracias a Cadetill por la explicacion grafica :D :D

damian2000 20-05-2004 00:01:18

Muchas gracias por contestar tan rapido, de la forma que decis eduarcol y cadetill, ya lo hice, pero sin resultado, ya que como dije se queda como pillado y no me deja pulsar el boton, probare lo que dice roman, muchas gracias a todos, salu2

eduarcol 20-05-2004 00:06:40

A lo que se refiere Roman
Cita:

Empezado por cadetill
Código Delphi [-]
for i := 0 to 100000 do
  begin
    if Salir then Break;
    Application.ProcessMessages; //Creo que a esto se refiere Roman
  end;
end;


Amilius 20-05-2004 00:43:16

Cita:

Empezado por damian2000
Muchas gracias por contestar tan rapido, de la forma que decis eduarcol y cadetill, ya lo hice, pero sin resultado, ya que como dije se queda como pillado y no me deja pulsar el boton, probare lo que dice roman, muchas gracias a todos, salu2

El ejemplo funciona a la perfección. :)

¿Tal vez el problema es el lugar donde ubicaste la llamada a procesar mensajes? Mejor si te asegures que se lo llame alrededor de unas 4 a 8 veces por segundo. Ni muy seguido en lo posible ni tan poco frecuente que aún tengas que esperar un rato hasta que se procesen los mensajes.

damian2000 20-05-2004 01:56:26

Pues ya me va perfectamente con el ejemplo que me habeis puesto, muchas gracias de new, salu2


La franja horaria es GMT +2. Ahora son las 06:02:22.

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