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}
procedure TMiThread.Execute;
begin
repeat
until Terminated;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FThread.Terminate;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
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!