Wątki jeszcze raz

0

Pod spodem jest kawałek kodu który dziala bez problemu ale mam pytanie jeżeli chcę jeszce raz robić to samo w osobnym okienku w nowym wątku to jak odpalić drugi wątek, nigdzie nie mogę się tego doczytać, wszyscy piszą o wielowątkowości, o synchronizacji ale nie doczyałem jak najlepiej odpalić drugi wątek ?
pozdrAS

TWatek = class(TThread)
private
// procedure MyOnTerminate(Sender: TObject);
protected
procedure Execute; override;
end;

TWatek = class(TThread)
private
// procedure MyOnTerminate(Sender: TObject);
protected
procedure Execute; override;
end;

var
Form1: TForm1;
Pierwszy: TWatek;
implementation

{$R *.dfm}

{ TForm1 }

procedure TWatek.Execute;
var
i : integer ;
n : integer ;
begin
FreeOnTerminate :=True; // po zakończeniu zwolnij klasę
n:=0;
Randomize;
Form1.Label1.Caption:=(' Zaczynam ');
Form1.Label1.Update;

    While not Terminated  do
                    begin
                     Inc(n);
                     i:=Random(10000000);
                     Form1.Label1.caption:= (IntToStr(i) );
                     Form1.Label1.Update;
                     Form1.Memo1.Lines.Add( 'Jestem w  ' + IntToStr(n) +' petli');
                     sleep(10);
                    end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin

Pierwszy.Terminate;
close();
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Pierwszy:=Twatek.Create(False);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
Pierwszy.Suspend;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Pierwszy.Resume
end;

0
   TWatek = class(TThread)
   protected
    procedure Execute; override;
    public
     Form:TForm;
   end;

var
  Form1: TForm1;

  Pierwszy: TWatek;
  Drugi   : TWatek;

implementation

{$R *.DFM}


Procedure TWatek.Execute;
Var i,n:integer ;
    Label1:TLabel;
    Memo1 :TMemo;
Begin
  FreeOnTerminate :=True;   // po zakończeniu zwolnij klasę
  n:=0;
  Randomize;
  Label1:=Form.FindComponent('Label1') as TLabel;
  Memo1:=Form.FindComponent('Memo1') as TMemo;
  Label1.Caption:=(' Zaczynam ');
  Label1.Update;

  While not Terminated  Do
  Begin
    Inc(n);
    i:=Random(10000000);
    Label1.caption:= (IntToStr(i) );
    Label1.Update;
    Memo1.Lines.Add( 'Jestem w  ' + IntToStr(n) +' petli');
    Sleep(10);
  End;
End;


Procedure TForm1.Button1Click;
Begin
  Pierwszy.Terminate;
  Close;
End;

Procedure TForm1.Button2Click;
Begin
  Pierwszy:=Twatek.Create(True);
  Pierwszy.Form:=Form1;
  Pierwszy.Resume;
End;

Procedure TForm1.Button5Click(Sender: TObject);
Begin
  Pierwszy.Suspend;
End;

Procedure TForm1.Button3Click(Sender: TObject);
Begin
 Pierwszy.Resume;
End;

0

Dobra ale gdzie się odpala drugi wątek, wyświetlanie tego samego to jest tylko przykład a ja muszę uruchomić drugi wątek który nnp robi to samo co pierwszy
PozdrAS

0
Pierwszy:=Twatek.Create(True); // pierwszy wątek
Drugi:=Twatek.Create(True); // drugi wątek
0

OK dzięki przetestuję.
AS

1 użytkowników online, w tym zalogowanych: 0, gości: 1