AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi StringList.Count ändert sich, wärend die Schleife läuft??
Thema durchsuchen
Ansicht
Themen-Optionen

StringList.Count ändert sich, wärend die Schleife läuft??

Ein Thema von romber · begonnen am 23. Feb 2005 · letzter Beitrag vom 23. Feb 2005
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

StringList.Count ändert sich, wärend die Schleife läuft??

  Alt 23. Feb 2005, 17:28
Hallo!

Beim Start schickt der UDP-Client seine IPAdresse an den Server. Diese IP-Adresse wird auf dem Server in eine TStringList hinzufügt. Nach bestimmtem Erreignissen schickt Server in einer Schleife Datenpackete an alle in der StringListe vorhandennen IP-Adresse:

Code:
...
for i := 0 to StringList1.Count - 1 do
Udp.Send(StringList1.Strings[i], 1234, 'Bestimmter Text');
...
Beim Schnießen sendet Client die IP-Adresse wieder an den Server und diese wird aus der Liste gelöscht. Was wird in diesem Fall passieren, wenn den String aus der Liste gelöscht wird, während die Schleife läuft? Wird die Schleife abgebrochen? Wenn ja, wie kann man das verhindern?
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: StringList.Count ändert sich, wärend die Schleife läuft?

  Alt 23. Feb 2005, 17:45
Ähm Da eird es Zugriffsverletzungen geben, da nach meinem wissen Für jede Verbindung ein Tread erstellt wird.
Wenn dieser sich dann aus der Liste da austrägt, machts Boom, da die TStringList nicht Threadsicher ist.



Da gibt es aber Thread sichere Listen, die sperrt man, arbeitet und entspert sie wieder wenn man fertig ist.
Wenn nun wer/Was anderes versucht drauf zuzugreifen wartet Er/Es bis er Zugriff bekommt, sperrt die Liste, arbeitet damit, entspert sie wieder ...

So im groben erklärt...
Ich hoffe das past so was ich erklärt hab

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: StringList.Count ändert sich, wärend die Schleife läuft?

  Alt 23. Feb 2005, 17:47
Zitat:
Wenn ja, wie kann man das verhindern?
Ganz einfach. Lösche nichts während du in der Schleife bist.
Delphi-Quellcode:
//
 var EnteredForLoop : Boolean = False;


//.......
 EnteredForLoop := true;
for i := 0 to StringList1.Count - 1 do
Udp.Send(StringList1.Strings[i], 1234, 'Bestimmter Text');
 EnteredForLoop := False;
//......


// wenn du was löschen willst, jederzeit:
 if not EnteredForLoop then
      begin
      // Code
      end;
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#4

Re: StringList.Count ändert sich, wärend die Schleife läuft?

  Alt 23. Feb 2005, 18:12
Danke euch!
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#5

Re: StringList.Count ändert sich, wärend die Schleife läuft?

  Alt 23. Feb 2005, 18:17
Moin, moin
Odr nimm ein While Schleife, dann kannst Du im Konstrukt auch löschen.

Grüße /Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#6

Re: StringList.Count ändert sich, wärend die Schleife läuft?

  Alt 23. Feb 2005, 19:07
Zitat von sniper_w:
....Ganz einfach. Lösche nichts während du in der Schleife bist....
Das löschen ist kein Problem. Aber die Schleife muss von oben nach unten durchlaufen werden.

Delphi-Quellcode:
var
  ndx : Integer;
begin
  For Pred (sl.count) downto 0 do
  begin
    Mache_mit_deiner_StringList_was_Du_möchtest (ausser ein .Free);
  end;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#7

Re: StringList.Count ändert sich, wärend die Schleife läuft?

  Alt 23. Feb 2005, 19:17
Moin, Mittelspätmoin,

Klasse! Wo das Simple doch so nah, baut man Codewüsten und Programmierserpentienen....

Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: StringList.Count ändert sich, wärend die Schleife läuft?

  Alt 23. Feb 2005, 19:41
Erst mal wird bei einer for-Schleife die Endebedingung nur einmal ausgewertet.
Es interessiert die Schleife also garnicht wenn sich bei "for I := 0 to List.Count - 1 do" Count aendert.
Entsprechend kracht es wenn man auf nicht mehr vorhandene Elemente zugreift.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:53 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