Главная страница
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.012 c
4-97083
TankMan
2002-12-13 23:56
2003.01.30
Отменить WM сообщение посланное программе....


14-96959
Rouse_
2003-01-12 21:21
2003.01.30
Бета-чай


6-96933
Эндрю2
2002-10-17 23:55
2003.01.30
Закрыть все открытые диски или папки на доступ


7-97043
XED
2002-11-17 12:03
2003.01.30
Hook!!!


1-96669
EXE
2003-01-21 15:46
2003.01.30
Подскажите пожалуйста, как выровнять текст в TStringGride...