Noch mal, ich habe nicht widersprochen, sondern nur etwas in Frage gestellt. Du hast folgendes vorgeschlagen:
Delphi-Quellcode:
unit Unit2;
interface
uses
SysUtils, Classes;
type
TTest =
class(TThread)
private
{ Private-Deklarationen }
protected
procedure Execute;
override;
end;
implementation
{ Wichtig: Methoden und Eigenschaften von Objekten in VCL oder CLX können
nur in Methoden verwendet werden, die Synchronize aufrufen, z.B.:
Synchronize(UpdateCaption);
wobei UpdateCaption so aussehen könnte:
procedure TTest.UpdateCaption;
begin
Form1.Caption := 'In einem Thread aktualisiert';
end; }
{ TTest }
procedure TTest.Execute;
var
i: Integer;
s:
String;
begin
for i := 0
to 9999
do
begin
s := s + IntToStr(i);
end;
end;
end.
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
TestThread: TThread;
procedure OnTerminate(Sender: TObject);
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
Unit2;
procedure TForm1.Button1Click(Sender: TObject);
begin
TestThread := TTest.Create(True);
TestThread.OnTerminate := OnTerminate;
TestThread.Resume;
end;
procedure TForm1.OnTerminate(Sender: TObject);
begin
TestThread :=
nil;
end;
Und ich habe in Frage gestellt, ob man in einem Ereignis eines Objektes, selbiges auf nil setzen kann. Hintergrund war der, dass wenn man in einem Destruktor die Objektreferenz auf nil setzt, es zu einer
Exception kommt. Das hatte ich im Hinterkopf.
Jetzt, wo ich den Code vor mir habe, ist mir auch klar geworden, dass das natürlich ohne Probleme funktioniert muss.