Форум: "Основная";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];
ВнизDestroy Найти похожие ветки
← →
nikulin (2003-01-21 10:09) [0]Есть потомок класса TThread. В его конструкторе Create создаю обьекты TADOConnection, TServerSocket, TADODataSet.
Далее создаю этот TThread в другом модуле
try
FollowMeThread:=TFollowMeThread.Create(False);
FollowMeThread.FreeOnTerminate:=True;
FollowMeThread.Priority:=tpNormal;
except
end;
А где мне освобожать обьекты TADOConnection, TServerSocket, TADODataSet ???
Я попробовал в деструкторе, но этот код даже не вызывается когда
TThread уничтожается...
Подскажите где неправ пожалуйста.
destructor TFollowMeThread.Destroy;
begin
FADODataSet.Close;
FADODataSet.Free;
FServerSocket.Close;
FServerSocket.Free;
if not (stClosed in FADOConnection.State) then FADOConnection.Close;
FADOConnection.Free;
inherited;
end;
← →
Skier (2003-01-21 10:18) [1]
> Я попробовал в деструкторе, но этот код даже не вызывается
> когда
> TThread уничтожается...
TThread.FreeOnTerminate := True; ?
← →
nikulin (2003-01-21 10:27) [2]Да TThread.FreeOnTerminate равно True, те поток уничтожается сразу после того как отработает метод Execute.
А где удалять обьекты? В методе Execute ?
← →
uw (2003-01-21 10:34) [3]При нажатии кнопки деструктор вызывается!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyThread = class(TThread)
destructor Destroy; override;
procedure Execute; override;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
MyThread: TMyThread;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin//
MyThread := TMyThread.Create(False);
MyThread.FreeOnTerminate := True;
end;
{ TMyThread }
destructor TMyThread.Destroy;
begin
inherited;
end;
procedure TMyThread.Execute;
begin
while NOT Terminated do begin
Sleep(100);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MyThread.Terminate;
end;
end.
← →
Юрий Зотов (2003-01-21 10:42) [4]> Я попробовал в деструкторе, но этот код даже не вызывается
> когда TThread уничтожается...
Не может такого быть. Все у Вас нормально, только проверьте, не забыли ли Вы написать override у деструктора.
← →
nikulin (2003-01-21 10:47) [5]2 Юрий Зотов
Спасибо огромное за помощь. Действительно не было override.
← →
uw (2003-01-21 10:50) [6]>Юрий Зотов
Деструктор не вызывается, потому что явно не вызывается либо Thread.Terminate, либо Thread.Free.
← →
Skier (2003-01-21 10:55) [7]>uw
???!!!
← →
uw (2003-01-21 10:57) [8]А зачем же тогда существуют Warnings?!
← →
Юрий Зотов (2003-01-21 15:21) [9]> uw © (21.01.03 10:50)
Деструктор не вызывался потому, что была разорвана его цепочка наследования, а вовсе не потому, что Вы говорите. Как только было написано override - все стало нормально.
А Warnings существуют для того, чтобы их читать. Только, увы, не все и не всегда это делают.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c