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 28-10-2005
Luis Castillo Luis Castillo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 102
Poder: 22
Luis Castillo Va por buen camino
Como detengo un Hilo

Hola colegas....

Tengo una forma que ejecuta una consuta por medio de un hilo.....debido a que los datos de la tabla pueden llegar a ser muy numerosos...

Pero quiero poner un boton que permita al usuario detener la busqueda....

Me podrian informar algo?
__________________
LK
Responder Con Cita
  #2  
Antiguo 28-10-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.934
Poder: 27
delphi.com.ar Va por buen camino
¿El procedimiento que ejecuta el hilo lo has creado vos?... Lo normal sería ejecutar el método Terminate, pero para esto es necesario que el código que se este ejecutando "se preocupe" por verificar el estado de la variable FTerminated, y si esta es True, que cancele la ejecución!

http://www.clubdelphi.com/foros/showthread.php?t=25299

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 28-10-2005
Luis Castillo Luis Castillo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 102
Poder: 22
Luis Castillo Va por buen camino
Hilo

Pues .....si el procedimiento lo hice yo....

El hilo solo abre la consulta con unos parametros....y yo lo que hago es decier Query.open

Como es eso que el codigo se preocupe por la verificacion de la variable FTErminated. Porque creo que no es asi....
__________________
LK
Responder Con Cita
  #4  
Antiguo 28-10-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.934
Poder: 27
delphi.com.ar Va por buen camino
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
 TMiThread = class(TThread)
  protected
    procedure Execute; override;
  end;

TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    FThread: TMiThread;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TMiThread }

procedure TMiThread.Execute;
begin
  repeat
    { Código en ejecución }
  until Terminated;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  { Le envía la señal para que el hilo termine correctamente }
  FThread.Terminate;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  { Mata el hilo forzosamente }
  TerminateThread(FThread.Handle, 0);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  FThread := TMiThread.Create(True);
  FThread.FreeOnTerminate := True;
  FThread.Resume;
end;

end.

Si el hilo creó un DataSet, y lo matas abruptamente, el hilo no se encargará de cerrar y liberar este DataSet. Es mas, es muy posible que la consulta se siga ejecutando en el servidor. Solo imagina lo que puede producir que varios usuarios cancelen reiteradamente consultas de este tipo.
Yo analizaría si tu herramienta de conexión y tu servidor soportan consultas asincrónicas.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 28-10-2005
Luis Castillo Luis Castillo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 102
Poder: 22
Luis Castillo Va por buen camino
Muy bien....

Huy....te agradezco esa explicacion tan detallada y precisa,....vamos a ver si puedo decirte algo...

En el Execute tu pones un procemiento que es el que toma el tiempo. Sin embargo mi proceso es solo este:

...
query.open
...

Creo que debo utilizar un hilo porque puede tener muchos registros. Si es asi, no puedo verificar Terminated como tu lo haces en el REPEAT ... UNTIL

NOTA...
yo estoy trabajando en Paradox.....y localmente...

Muchisimas gracias....
__________________
LK
Responder Con Cita
  #6  
Antiguo 28-10-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.934
Poder: 27
delphi.com.ar Va por buen camino
Fíjate en mi explicación que hay dos formas de terminar un hilo, por las buenas con Terminate, y por las malas con TerminateThread. Vos estas buscando la segunda, yo no lo sugiero, pero bué!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 23-03-2007
Ainbazter Ainbazter is offline
Registrado
 
Registrado: sep 2005
Posts: 6
Poder: 0
Ainbazter Va por buen camino
Tengo exactamente el mismo problema, ¿como lo resolvisteis finalmente?
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 14:30:34.


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