AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threads Organisieren ?

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

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

Threads Organisieren ?

  Alt 23. Sep 2011, 17:01
Delphi-Version: 7
Hi,

ich schreibe gerade ein kleines Downloadtool. Jeder Download bekommt einen eigenen Thread.

Nun habe ich im Hauptprogramm eine ObjectList erstellt, in die jeder Thread zur besseren Verwaltung abgelegt wird.

Wird nun ein Download abgebrochen, so wird der Thread mit .terminate abgeschossen und aus der ObjectList gelöscht.

Allerdings habe ich aktuell ein Problem bei Downloads die nicht abgebrochen werden, sondern normal/erfolgreich beendet wurden. Ganz am Ende des threads rufe ich ein Synchronize auf.

Der versuch in diesem letzten Synchronize direkt den Thread aus der ObjectList zu löschen schlug fehl.

Hat jemand eine Idee wie ich das hinbekommen kann, dass ein fertiger Thread sich automatisch aus der ObjectList entfernt ?

Gruß Yannic
  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, 18:25
"Owned" die Objectlist den Thread? Dann ruft sie nämlich free auf bevor der Thread wirklich beendet ist. Also lieber ownObject auf false setzen und freeOnTerminate des Threads auf true.
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, 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
 
#4

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
 
#5

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
 
#6

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.004 Beiträge
 
Delphi 2009 Professional
 
#7

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
 
#8

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.004 Beiträge
 
Delphi 2009 Professional
 
#9

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
Benutzerbild von BUG
BUG

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

AW: Threads Organisieren ?

  Alt 24. Sep 2011, 11:37
Effektiv ist es eine Veränderung der Liste, während andere Threads auf diese zugreifen können, z.B. über die Elemente iterieren.
Nö, das ist das eine Liste mit Threads, in die sie sich (im Kontext des MainThreads, ohne Unterbrechung von Code ~> sicher für MainThread) ein- oder austragen und sie sonst nicht anfassen.
Alle Zugriffe sind unterbrechungsfrei und finden hintereinander statt. Was soll da schon schief gehen

Wenn da jetzt noch andere Threads herumpfuschen, wird es natürlich interessant
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz