Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.30;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
1-96864
Andy_
2003-01-21 11:22
2003.01.30
Возврат данных из DLL


14-97028
blackman
2003-01-13 22:38
2003.01.30
Цивилизованный рынок ПО с советским лицом


1-96832
diks
2003-01-20 22:36
2003.01.30
Пароль


6-96939
LORD
2002-11-28 22:04
2003.01.30
сервер для компонента NMSTRM.


1-96737
alextov
2003-01-21 16:14
2003.01.30
Как отформатировать таблицу в Word e так чтоб она была посередине