Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi instanz freigeben (https://www.delphipraxis.net/35299-instanz-freigeben.html)

Pseudemys Nelsoni 5. Dez 2004 05:54


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?

mirage228 5. Dez 2004 07:40

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:
MyServerSocket.Free;
MyServerSocket := nil;
oder je nach Delphi-Version auch:
Delphi-Quellcode:
FreeAndNil(MyServerSocket);
mfG
mirage228

Luckie 5. Dez 2004 11:19

Re: instanz freigeben
 
Mit der Methode Free wird nur der Speicherbereich freigegeben, nicht aber der Zeiger ungültig gemacht.

http://www.delphipraxis.net/internal...ght=freeandnil

Pseudemys Nelsoni 5. Dez 2004 15:36

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:

MyServerSocket.Active := true;
auskommentiere, dann geht alles.... aber ein niemals aktiver server bringt mir nicht viel, muss man noch irgendwas machen nachdem der server aktiv is und man ihn beenden will?

Pseudemys Nelsoni 6. Dez 2004 15:51

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? :(

Pseudemys Nelsoni 7. Dez 2004 17:21

Re: instanz freigeben
 
*schieb*

Muetze1 7. Dez 2004 20:10

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

Robert_G 7. Dez 2004 20:32

Re: instanz freigeben
 
Zitat:

Zitat von Pseudemys Nelsoni
*schieb*

Ich hatte dir gestern schon im Chat geschrieben, dass es sowohl in D7 als auch in der D2005-Trial lief. ;)

Pseudemys Nelsoni 7. Dez 2004 20:34

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