Mały test - czysta aplikacja. Na formie 1 Label (lbl1) i 2 Buttony (btn1 i btn2), kod poniżej
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
lbl1: TLabel;
btn2: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
Unit2;
var
t: TTest;
procedure TForm1.btn1Click(Sender: TObject);
begin
t := TTest.Create(False);
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
t.Terminate;
end;
end.
oraz unit z wątkiem (stworzony standardowo przez wybranie File->New->Other->Thread Object)
unit Unit2;
interface
uses
Classes;
type
TTest = class(TThread)
private
{ Private declarations }
i: Integer;
protected
procedure Execute; override;
procedure Show;
end;
implementation
uses
Unit1,
SysUtils;
procedure TTest.Execute;
begin
FreeOnTerminate := True;
i := 0;
while not Terminated and (i < 1000) do
begin
Inc(i);
Synchronize(Show);
Sleep(10);
end;
end;
procedure TTest.Show;
begin
Form1.lbl1.Caption := IntToStr(i);
end;
end.
Działa tak jak powinien, tzn odlicza od 0 do 1000 i kończy działanie lub po naciśnięciu btn2. Nic się nie sypie, nie ma żadnych błędów.
Dalej uważam, że to ty coś spieprzyłeś i że błąd jest z twojej winy a nie przez FreeOnTerminate. Polecam poczytać http://rtfm.killfile.pl, w szczególności http://rtfm.killfile.pl/#lajza http://rtfm.killfile.pl/#precyzja oraz http://rtfm.killfile.pl/#precyzja1
i na koniec jeszcze
mordek napisał(a)
dopiero usunięcie linii z "FreeOnTerminate", dało pozytywny skutek, co jest całkiem logiczne.
wskaż tą wielką logikę, którą się kierowałeś
Nie zmienia to faktu, iż wolałbyś, aby ludzie nie zadawali pytań - tych prostych, jak i tych trudnych.
Ilość wizyt 77
Ilość postów 10
nie masz podstaw aby oceniać mnie i moje wypowiedzi ani tego co bym wolał a czego nie.
dla mnie EOT