![]() |
StringList.Count ändert sich, wärend die Schleife läuft??
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:
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?
...
for i := 0 to StringList1.Count - 1 do Udp.Send(StringList1.Strings[i], 1234, 'Bestimmter Text'); ... |
Re: StringList.Count ändert sich, wärend die Schleife läuft?
Ä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. :roll: 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 :zwinker: Bye |
Re: StringList.Count ändert sich, wärend die Schleife läuft?
Zitat:
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; |
Re: StringList.Count ändert sich, wärend die Schleife läuft?
Danke euch!
|
Re: StringList.Count ändert sich, wärend die Schleife läuft?
Moin, moin
Odr nimm ein While Schleife, dann kannst Du im Konstrukt auch löschen. Grüße /Martin |
Re: StringList.Count ändert sich, wärend die Schleife läuft?
Zitat:
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; |
Re: StringList.Count ändert sich, wärend die Schleife läuft?
Moin, Mittelspätmoin,
Klasse! Wo das Simple doch so nah, baut man Codewüsten und Programmierserpentienen.... Grüße // Martin |
Re: StringList.Count ändert sich, wärend die Schleife läuft?
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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