Sprzątanie po wątku Tthread

0

Jakie operacje powinienem wykona gdy zamykam formę, w której korzystam klasy:

TEngine=class(Tthread)
protected
procedure execute; override;
end;

procedure TEngine.execute;
begin
  inherited;
  freeonterminate:=true;
    while (form10.mecz.hset<3) and (form10.mecz.aset<3) do begin
  if form10.czekaj=0 then
  form10.mecz.play;
  end;
  end;

Klasa za pomocą wątków rozgrywa cały czas kolejne akcję meczu :) lub czeka az pozwoli jej na to user. W pewnym momencie chce zakończyc działanie formy, zakłądając ze kiedyś utworzę ją ponownie i będe korzystał również z klasy TEngine. Jeśli nie bede po niej sprzątał to za którymś razem tworząc ją ponownie otrzymam komunikat o naruszeniu pamięci. Czy wystarczy:

procedure TForm10.FormClose(Sender: TObject; var Action: TCloseAction);
begin
engine.terminate;
engine.free;
end;

Czy możecie mi pomóc?

0

Jeśli dajesz FreeOnTerminate to nie wywołuj potem Engine.Free;

procedure TEngine.Execute;
begin
  FreeOnTerminate:=true;
  while (Not Self.Terminated) and (form10.mecz.hset<3) and (form10.mecz.aset<3) do 
  begin
    if form10.czekaj=0 then
    form10.mecz.play;
  end;
end;
0

Takie pytanko mam związane z tematem: jeżeli mam utworzony obiekt TThread dynamicznie (za pomocą wskaźnika) to czy procedura TThread::Free usuwa od razu ten obiekt z pamięci, znaczy się działa tak jakbym wywołał instrukcję "delete Wskaznik" ??

Jeszcze jedno pytanko: mam ową procedurę Execute. Czy gdy wszystkie instrukcje w niej zawarte zostaną wykonane to automatycznie wykonywana jest procedura TThread::Termiante? Czy może trzeba na samym końcu wywołać to TThread::Termiante??

Jeżeli nie ustawie FreeOnTerminate, to czy po pierwszym wykonaniu procedury TThread::Execute można odpalić ją jeszcze raz dając znowu TThread::Resume?

Jak można zauważyć piszę ten program pod C++, ale nie widzę potrzeby zakładania nowego wątku w osobnym dziale, gdyż z tego co wiem obsługa wielowątkowości jest zorganizowana tak samo w Delphi oraz w C++.

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