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 19-05-2004
damian2000 damian2000 is offline
Miembro
 
Registrado: may 2004
Posts: 13
Poder: 0
damian2000 Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 19-05-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 19-05-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 19-05-2004
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
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
Responder Con Cita
  #5  
Antiguo 19-05-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #6  
Antiguo 20-05-2004
damian2000 damian2000 is offline
Miembro
 
Registrado: may 2004
Posts: 13
Poder: 0
damian2000 Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 20-05-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
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;
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #8  
Antiguo 20-05-2004
Amilius Amilius is offline
No confirmado
 
Registrado: ene 2004
Posts: 138
Poder: 0
Amilius Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 20-05-2004
damian2000 damian2000 is offline
Miembro
 
Registrado: may 2004
Posts: 13
Poder: 0
damian2000 Va por buen camino
Pues ya me va perfectamente con el ejemplo que me habeis puesto, muchas gracias de new, salu2
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


La franja horaria es GMT +2. Ahora son las 03:11:40.


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