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: 21
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.932
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: 21
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.932
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: 21
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.932
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 28-10-2005
Luis Castillo Luis Castillo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 102
Poder: 21
Luis Castillo Va por buen camino
entendido

ok .....ya lo vi.

Pero tambien es claro lo que yo hago....sobre que el proceso es solo una linea: abrir una consulta. Y obviamente quiero hacer esto de la mejor manera....


TU QUE HARIAS.....

Muchas gracias.....

PD: ya que tu estas conectado....no sepuede ir a un chat?
__________________
LK
Responder Con Cita
  #8  
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.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por Luis Castillo
TU QUE HARIAS.....
Lo que sugerí anteriormente:
Cita:
Empezado por Delphi.com.ar
Yo analizaría si tu herramienta de conexión y tu servidor soportan consultas asincrónicas.
Desconozco Paradox como para poder seguir guiándote.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 28-10-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por Luis Castillo
PD: ya que tu estas conectado....no sepuede ir a un chat?
Esto se convertiría en un servicio técnico, del que el resto de la comunidad no obtendría ningún beneficio. Te invito a leer la guia de estilo (link en mi firma) y recordar que nuestra regla general es: Un tema público se mantendrá público. De esa manera, hemos logrado una base de datos de mas de 170,000 mensajes, entre los foros actuales y los antiguos (sin tomar en cuenta unos 25,000 que, según recuerdo, se perdieron de los mas antiguos. )

Saludos.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
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 10:05:47.


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