![]() |
instanz freigeben
moin
ich habe folgendes:
Delphi-Quellcode:
procedure TForm1.ToolButton1Click(Sender: TObject);
begin if not assigned(MyServerSocket) then begin MyServerSocket := TMyServerSocket.Create(self); MyServerSocket.ServerHost := 'irc.euirc.net'; MyServerSocket.Active := true; ToolButton1.ImageIndex := 1; end else begin MyServerSocket.Free; ToolButton1.ImageIndex := 0; end; end; MyServerSocket ist TMyServerSocket, abgeleitet von TServerSocket.... das problem ist nun folgendes, wenn ich meinen button anklicke und die instanz auf nil zeigt (not assigned) dann wird das objekt erzeugt, wenn sie schon existiert (else teil) dann wird sie wieder freigegeben... das funktioniert auch bis zum zweiten buttonklick, wenn ich nun aber ein drittes mal drauf klicke bleibt der button gedrückt und das programm friert ein..... habe gedacht das ich vielleicht vor dem freigeben noch "Active := false" machen muss, aber wird dadurch auch nicht besser... ist irgendwas falsch? |
Re: instanz freigeben
Hi,
wenn du nur ein MyServerSocket.Free ausführst, verweist die Variable trotzdem noch auf einen (ungültigen) Speicherbereich. Assigned() gibt dann möglicherweise "true" zurück. Also entweder
Delphi-Quellcode:
oder je nach Delphi-Version auch:
MyServerSocket.Free;
MyServerSocket := nil;
Delphi-Quellcode:
mfG
FreeAndNil(MyServerSocket);
mirage228 |
Re: instanz freigeben
Mit der Methode Free wird nur der Speicherbereich freigegeben, nicht aber der Zeiger ungültig gemacht.
![]() |
Re: instanz freigeben
moin, ich habe FreeAndNil (davor) verwendet, hat nicht funktioniert, deswegen habe ich es dann nur mit "free" versucht, aber logischerweise geht das auch nicht da der zeiger ja nicht auf nil gesetzt wird... nunja, aber beide wege gehen nicht, ich verstehe das nicht, wenn ich das ganze mit freeandnil mache und die zeile:
Zitat:
|
Re: instanz freigeben
Liste der Anhänge anzeigen (Anzahl: 1)
ok ich habe gemerkt das ich nichtmal ein serversocket erzeugt bekomme (jedenfalls kein zweites mal)
ich habe den tets mal im anhang (sind nur 3 zeilen code...ich seh da nix falsches) klickt den button 3 mal, dann seht ihr das das programm eingefroren ist...kann mir jemand sagen woran das liegt? :( |
Re: instanz freigeben
*schieb*
|
Re: instanz freigeben
Moin!
Aso, vergessen zu schreiben: getestet und rund 30x nacheinander geklickt: keine Probleme - wurde immer sauber angelegt und wieder freigegeben und keine Problem... MfG Muetze1 |
Re: instanz freigeben
Zitat:
|
Re: instanz freigeben
hallo ihr 2, danke für die tests...
hm das ist komisch, denn wenn ich eine ZConnection kompo(zeos) raufschiebe und mit der connecte(wozu auch immer), funktioniert das erzeugen/freigeben... also haben diese zeos teile irgendwie meine vcl(?) kaputt gemacht :cry: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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