AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Threads Organisieren ?

Ein Thema von Blamaster · begonnen am 23. Sep 2011 · letzter Beitrag vom 25. Sep 2011
Antwort Antwort
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#1

AW: Threads Organisieren ?

  Alt 23. Sep 2011, 18:50
Wenn die Liste den Thread nicht "Owned" und dieser sich durch FreeOnTerminate beendet und ich anschließend Liste.Count aufrufe. Ist der Thread dann dort noch zu finden, oder verschwindet die Referenz dann auch atomatisch aus der Liste ?
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: Threads Organisieren ?

  Alt 23. Sep 2011, 20:36
Ich meinte das so: die Liste "besitzt" den Thread nicht, dann kannst du ihn gefahrlos aus der Liste löschen. Nachdem das getan ist, terminiert der Thread und wird wegen FreeOnTerminate aufgeräumt.

Alternativ könntest du bei den selben Einstellungen in onTerminate den Thread aus der Liste löschen.
Ist irgendwie gefühlt sauberer.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#3

AW: Threads Organisieren ?

  Alt 23. Sep 2011, 22:00
Funktioniert Danke
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Threads Organisieren ?

  Alt 23. Sep 2011, 23:55
Ansonsten kann man das auch schön mit dem Visitor-Pattern lösen.

Delphi-Quellcode:
type
  TMyThread = class( TThread )
    private
      FList : TObjectList;
    public
      procedure AddToList( AList : TObjectList );
      procedure RemoveFromList( AList : TObjectList );
      destructor Destroy; override;
  end;

procedure TMyThread.AddToList( AList : TObjectList );
begin
  AList.Add( Self );
end;

procedure TMyThread.RemoveFromList( AList : TObjectList );
begin
  AList.Remove( Self );
end;

destructor Destroy;
begin
  RemoveFromList( FList );
  inherited;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.011 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Threads Organisieren ?

  Alt 24. Sep 2011, 09:06
Ansonsten kann man das auch schön mit dem Visitor-Pattern lösen.

Wenn gleichzeitig ein anderer Thread die Liste durchläuft, während terminierende Threads sich daraus entfernen, kann es zu amüsanten Ergebnissen kommen
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Threads Organisieren ?

  Alt 24. Sep 2011, 09:20
Ansonsten kann man das auch schön mit dem Visitor-Pattern lösen.
Wenn gleichzeitig ein anderer Thread die Liste durchläuft, während terminierende Threads sich daraus entfernen, kann es zu amüsanten Ergebnissen kommen
Das Destroy wird aber nicht mehr im ThreadKontext ausgeführt
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.011 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Threads Organisieren ?

  Alt 24. Sep 2011, 09:29
Ansonsten kann man das auch schön mit dem Visitor-Pattern lösen.
Wenn gleichzeitig ein anderer Thread die Liste durchläuft, während terminierende Threads sich daraus entfernen, kann es zu amüsanten Ergebnissen kommen
Das Destroy wird aber nicht mehr im ThreadKontext ausgeführt
Macht es denn einen Unterschied, in welchem Kontext das Destroy ausgeführt wird? Effektiv ist es eine Veränderung der Liste, während andere Threads auf diese zugreifen können, z.B. über die Elemente iterieren.
Michael Justin
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.011 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Threads Organisieren ?

  Alt 25. Sep 2011, 08:36
Ansonsten kann man das auch schön mit dem Visitor-Pattern lösen.

Delphi-Quellcode:
type
  TMyThread = class( TThread )
    private
      FList : TObjectList;
    public
      procedure AddToList( AList : TObjectList );
      procedure RemoveFromList( AList : TObjectList );
      destructor Destroy; override;
  end;

procedure TMyThread.AddToList( AList : TObjectList );
begin
  AList.Add( Self );
end;

procedure TMyThread.RemoveFromList( AList : TObjectList );
begin
  AList.Remove( Self );
end;

destructor Destroy;
begin
  RemoveFromList( FList );
  inherited;
end;
FList wird nie verwendet ausser im Destruktor - daher auch mein Mißverständnis. Wozu dient FList?
Michael Justin
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#9

AW: Threads Organisieren ?

  Alt 25. Sep 2011, 10:30
Also ich würde die Thread-Liste einfach threadsicher implementieren und damit das Risiko eliminieren, das irgendwer später mal unkontrolliert auf die Liste zugreift.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz