Seite 2 von 2

Verfasst: 15.09.2004 18:54
von Sylvia
Andre hat geschrieben:Mal sehen, ob er das existierende CodeArchiv kurzfristig PB3.91-kompatibel bekommt...
und für 3.92 ? 3.93 ? 3.94 ?....usw.usw :freak:

Verfasst: 15.09.2004 19:02
von sbehrens
NicTheQuick hat geschrieben:Das reicht solange wie die Variable "Var" nicht geändert wird. Schließlich musst du den Speicher nach Gebrauch wieder mit dem Rückgabewert als Handle freigeben. Wird das Handle geändert oder gelöscht, kannst du den Speicher nicht mehr freigeben, außer du beendest das Programm. Man sollte sich aber selbst angewöhnen solche Sachen selbst zu kontrollieren und freizugeben.
Stimmt! Also sollte man immer den reservierten Speicher selber wieder freigeben! *merk* (Wieder was neues dazu gelernt)

mfG
Basti

Verfasst: 17.09.2004 10:51
von coldarchon
NicTheQuick hat geschrieben: Ist da was schwer dran zu verstehen?
schlechten Tag gehabt? Hätte ich Dein Horoskop vorher lesen sollen? Was kann man denn großartig damit erreichen, wenn man eine solche Variable ohne ID verändert?

Verfasst: 17.09.2004 14:40
von NicTheQuick
Sorry, so war das ganz und gar nicht gemeint. Es war wirklich eine ernst zunehmenden Frage. Ich war ganz und gar nicht mies gelaunt. :allright:

Verfasst: 17.09.2004 14:46
von coldarchon
<)

aber ich weiß wirklich keinen praktischen Nutzen für das Verändern einer solchen Variable.

Verfasst: 17.09.2004 15:08
von freedimension
coldarchon hat geschrieben:<)

aber ich weiß wirklich keinen praktischen Nutzen für das Verändern einer solchen Variable.
Zur schnellen Speichermanipulation mit Pointern natürlich, sei es ein Bild oder eine eigene Speicherstruktur.

Verfasst: 18.11.2004 02:10
von BitchBird
ich hab da auch so ein problem... ich wollte mich halt in die network library reinarbeiten, und testweise einen minichat schreiben. der server empfängt, der client sendet halt.

server:

Code: Alles auswählen

InitNetwork()

OpenConsole()

CreateNetworkServer(6000)

  *read_buf = AllocateMemory(1024)
  
Repeat
  
  taste$ = Inkey()
  
  If NetworkServerEvent() = 1
    PrintN("Neuer Client!")
  EndIf
  
  If NetworkServerEvent() = 4
    PrintN("Client left!")
  EndIf
  
  If NetworkServerEvent() = 2
    Repeat
      client_id = NetworkClientID() 
      bytes_rec = ReceiveNetworkData(client_id, *read_buf, 1024)
      Print(PeekS(*read_buf))
    Until(bytes_rec < 1024)
    FreeMemory(*read_buf)
    PrintN("")
  EndIf
  Delay(10)
Until Left(taste$, 1) = Chr(27)
  
CloseNetworkServer()

CloseConsole()
client:

Code: Alles auswählen

InitNetwork()

OpenConsole()

  OpenNetworkConnection("127.0.0.1",6000)
  
  ConnectionID = OpenNetworkConnection("127.0.0.1",6000)
  
  Repeat
  
    taste$ = Inkey()
    
    If Left(taste$,1) = Chr(9)
      message$ = Input()
      SendNetworkString(ConnectionID,message$)
      PrintN("")
    EndIf
    
    Delay(10)
    
  Until Left(taste$,1) = Chr(27)
  
  CloseNetworkConnection(ConnectionID)

CloseConsole()
nun wird der speicher aber nie ganz geleert. es kommen sonderzeichen dazu oder der rest eines vorher längeren strings wird mitausgegeben. ich sage dazu, dass ich von pointern und buffer u.ä. nicht wirklich was verstehe und es auch nicht aus der hilfe rausholen konnte.... lösungsvorschläge?

Verfasst: 18.11.2004 09:46
von Danilo
BitchBird hat geschrieben:nun wird der speicher aber nie ganz geleert. es kommen
sonderzeichen dazu oder der rest eines vorher längeren
strings wird mitausgegeben.

lösungsvorschläge?
Einfach bei PeekS() die maximale Länge mit angeben:

Code: Alles auswählen

Print( PeekS(*read_buf, bytes_rec) )
Was mir noch aufgefallen ist:
Du gibst den Puffer nach dem ersten komplett empfangenen
String wieder frei.
Wenn der nächste String empfangen wird existiert der Puffer
nicht mehr und ein Crash ist nahe.

Das FreeMemory(*read_buf) solltest Du also nach der
Repeat..Until-Schleife positionieren.


Wenn diese 2 Dinge behoben sind sollte es die Probleme
nicht mehr geben.

Verfasst: 18.11.2004 12:38
von BitchBird
läuft, wunderbar! danke danilo!