Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
1-96654
nikulin
2003-01-21 10:09
2003.01.30
Destroy


3-96602
Chubais
2003-01-13 14:47
2003.01.30
Перепутываются строки в таблицах


3-96633
Kurt_
2003-01-14 12:33
2003.01.30
ExecuteOptions: ExecuteNoRecords! не пойму как использовать это!


14-96971
Иксик
2003-01-11 12:28
2003.01.30
PCI, ISA


1-96872
viper
2003-01-21 12:08
2003.01.30
ClassName





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский