[Delphi] AAAAAAAA problemy z wątkami!!!!

0

Pochwalony!
MAm sobie takiego problema: otóż...
Czytałem sobie ksiząkę i natrafiłem na takie coś jak wątki. Zrobiłem sobie programika doświadczalnego, ale nie wiedziałem niestetuy czy zwalnia pamięć (Po kliknięciu pierwszego buttona włączał się wątek który zmieniał wartość label'a na x + 1 > 10000 :):):), a drugi button miał to stopować :P ). Noi tutaj pojawiły się przeszkody. Po włączeniu pierwszego, a następnie drugiego buttona z pięć razy program mi tak jakby kasował label'a i sam się zawieszał, tak, aż czasami Debugger nie potrafił go do ładu doprowadzić. Podam jeszce kodzik:

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

Tya = class(TThread)
private
procedure MyOn(Sender: TObject);
public

protected
procedure Execute; override;
end;

var
Form1: TForm1;
Watek: Tya;

implementation

{$R *.dfm}

{ Tya }

procedure Tya.Execute;
var
T: Integer;
begin
FreeOnTerminate := True;
OnTerminate := MyOn;
for T := 0 to 10000 do
Form1.Label1.Caption := IntToStr(T);

end;

procedure Tya.MyOn(Sender: TObject);
begin
ShowMessage('koniec');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Watek := Tya.Create(False);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Watek.Resume;
end;

Czy ktoś zrozumiał moje pytanko?? P:P Czy ktoś zna na nie odpowiedź?? P:P To proszę o pomoc!! P:P
Pozdrowienia KiteK

0

W execute spróbuj sprawdzać terminate i jezeli jest true to zakoncz pętlę i tym samym execute'a moze pomóc. Aczkolwiek nie sprawdzalem bo jestem zawalony wlasna praca.

0

ahca, PS. W kodzie Button2'a próbowałem na początku dawać Tya.Suspend; ale i tak nie dawało efektu, Tya.Resume; daje efekt zakończenia wątku, WYŚWIETLENIA BŁĘDU !!, oraz zakończenia ątku. Jeszcze raz proszę o pomoc. Dzięki

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