Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Item aus verketteter liste löschen (https://www.delphipraxis.net/30068-item-aus-verketteter-liste-loeschen.html)

Pseudemys Nelsoni 19. Sep 2004 13:44


Item aus verketteter liste löschen
 
hi,

ich habe folgendes geschrieben um ein item aus einer verketten liste zu löschen:

Delphi-Quellcode:
procedure TServer.ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
var
  CurCon: PCon;
begin
  CurCon := AnkerCon;
  while not (CurCon^.SockHandle = Socket.SocketHandle) do
    CurCon := CurCon.next;
  if CurCon = AnkerCon then
  begin
    if CurCon.next <> nil then
    begin
      CurCon.next.prev := nil;
      AnkerCon := CurCon.next;
    end;
  end
  else if CurCon.next = nil then
    CurCon.prev.next := nil
  else
  begin
    CurCon.prev.next := CurCon.next;
    CurCon.next.prev := CurCon.prev;
  end;
  Dispose(CurCon);
end;
ich kann ihn leider nicht testen da es eine server anwendung ist und ich zum test n paar leute bräuchte die draufgehen unter wieder disconnecten usw...
deswegen wollt ich hier mal fragen ob es richtig aussieht?
Im ersten fall wird geprüft ob das aktuelle(CurCon) item das erste item (anker) ist im zweiten fall prüfe ich ob das aktuelle das letzte item ist und im letzten fall ist es ein item das in der mitte irgendwo ist. Kann das jemand so erkennen ob da irgendwo fehler sind?

atreju2oo0 19. Sep 2004 13:49

Re: Item aus verketteter liste löschen
 
Das sieht eigentlich genau richtig aus.

8)

Pseudemys Nelsoni 19. Sep 2004 13:53

Re: Item aus verketteter liste löschen
 
hab das:

Delphi-Quellcode:
    if CurCon.next <> nil then
    begin
      CurCon.next.prev := nil;
      AnkerCon := CurCon.next;
    end;
nochmal in:

Delphi-Quellcode:
    if CurCon.next <> nil then
      CurCon.next.prev := nil;
    AnkerCon := CurCon.next;
geändert.

SirThornberry 19. Sep 2004 15:04

Re: Item aus verketteter liste löschen
 
warum benutzt du nicht einfach "TList" und rufst dann die methode "delete" davon auf?

Jens Schumann 19. Sep 2004 15:42

Re: Item aus verketteter liste löschen
 
Zitat:

Zitat von SirThornberry
warum benutzt du nicht einfach "TList" und rufst dann die methode "delete" davon auf?

Das gleiche Frage ich mich eigentlich auch. Da es sich aber offensichtlich um eine Serveranwendung sollte es auch ThreadSafe sein. Deshalb schlage ich anstatt TList TThreadList vor.

Chewie 19. Sep 2004 17:10

Re: Item aus verketteter liste löschen
 
TList ist aber keine verkettete Liste, sondern eine sequenzielle!
Delphi bringt von Haus aus aber keine Klassen für allgemeine verkettete Listen mit, sondern nur für Stacks und Queues. Vielleicht tuts das für dich auch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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