Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
25. Jun 2014
Ein Problem sehe ich hier im Destructor
destructor TD2007Thread.Destroy;
begin
if (FThreadID <> 0) and not FFinished then
begin
Terminate;
if FCreateSuspended then
Resume;
WaitFor; // Diese Stelle ist problematisch
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
25. Jun 2014
Hier mal ein Beispiel-Thread, der sich nach außen hin "harmlos" verhält.
TMyForm = class( TForm )
procedure Button1Click( Sender:TObject );
private
FMyThread : TMyThread;
public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
end;
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
25. Jun 2014
Es sollte reichen, wenn du die Instanzen nach dem inherited freigibst.
destructor TFindSnapPointsThread.Destroy;
begin
inherited;
FFindSnapPoints.Free;
end;
Um hier aber etwas wirklich konkretes zu sagen, musst du dir dringend einmal anschauen, was in TThread.Destroy so passiert.
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
23. Jun 2014
Ich verstehe gar nicht, was dieses Gehampel mit den Threads soll.
Ein Thread sollte sich bei TThread.Terminate von selber auch sauber beenden (muss nicht schlagartig sein, aber er sollte sich ab jetzt nur noch Augen für das Sandmännchen haben)
TThread.FreeOnTerminate - habe ich mal benutzt, ist aber ewig her, weil es mehr Probleme schafft als wirklich hilft
Solche Threads packt man einfach...
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
7. Aug 2013
Wann hat der denn hier geantwortet? :gruebel:
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
7. Aug 2013
Einfach in eine TObjectList packen, aber beim Aufräumen die Threads beenden, auf Fertigstellung warten und dann wegwerfen.
Eine TThreadList ist dafür gedacht, dass mehrere Threads in diese Liste greifen können (und zwar mit TThreadList.LockList)
Achtung: Das Codebeispiel bitte nur unter dem Aspekt TThtreadList betrachten, ansonsten ist das ein absolutes NoGo-Beispiel