unit uEndlessThread;

interface

uses
  SysUtils, Classes;

type
  TEndless = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
    procedure UpdateMainForm;
  end;

implementation

uses fmEndless;

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TEndless.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TEndless }

procedure TEndless.UpdateMainForm;
begin
  Form1.ListBox1.Items.Add(IntToStr(Self.ThreadID) + ' : ' + FloatToStr(Random * 100000));
  if (Form1.ListBox1.Items.Count > 1000) then
    Form1.ListBox1.Items.Clear;
end;

procedure TEndless.Execute;
begin
  { Place thread code here }
  Randomize;

  while (not Self.Terminated) do
    Synchronize(UpdateMainForm);
end;

end.
 