Witam,
mam taki kod:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TRepThread = class(TThread)
private
FRepVal: Integer;
protected
procedure Execute; override;
public
constructor Create(RepVal : Word);
end;
type
TMyPanel = class(TPanel)
private
{ Private declarations }
FRep: Word;
RepTimerThread : TRepThread;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner : TComponent; RepTime: Word);
destructor Destroy; override;
published
{ Published declarations }
end;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TRepThread.Create(RepVal : Word);
begin
inherited Create(False);
FRepVal := RepVal;
end;
procedure TRepThread.Execute;
begin
FreeOnTerminate := True;
while not (Application.Terminated) or (Terminated) do
begin
Sleep(FRepVal);
end;
end;
constructor TMyPanel.Create(AOwner : TComponent; RepTime: Word);
begin
inherited Create(AOwner);
FRep:=RepTime;
Self.DoubleBuffered:=true;
Self.Height:=200;
Self.Width:=200;
Self.Parent:=TWinControl(AOwner);
RepTimerThread:=TRepThread.Create(FRep);
end;
destructor TMyPanel.Destroy;
begin
RepTimerThread.Terminate;
RepTimerThread.Free;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TMyPanel.Create(Form1,1000);
end;
end.
Jak widać staram się stworzyć własną klasę dziedzicząc po Tpanel oraz w niej wątek który będzie cyklicznie pobierał kilka informacji z bazy danych i wyświetlał w tym panelu.
Problem mam z tym że jak zamykam program to proces nadal wisi i nie wiem dlaczego, czy możecie mi wskazać gdzie robię błąd ?
Jak pewnie zauważycie robię dziwne konstrukcje typu FreeOnTerminate := True;
a i tak w destruktorze Panela wykonuję RepTimerThread.Terminate;
RepTimerThread.Free; Takie egzotyczne konstrukcje powstały w akcie mojej desperacji.
Poradźcie mi w czym jest błąd.
Pozdrawiam