Kleine Fragen zu Network + Threads | <weitere Frage>

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

Myn

Betreff: Kleine Fragen zu Network + Threads | <weitere Frage>

BeitragDi, Jul 31, 2012 11:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

als wie der Titel bereits aussagt habe ich mehrere Fragen.


1) Network
Ist es möglich mehrere TCP(Sockets) Verbindungen über den gleichen Port laufen zu lassen?
Wenn ja (wovon ich ausgehe) wie genau löst man das?
Geht das ohne Erweiterung überhaupt? (LIB)
Mit den normalen Grund Network Funktion von BMAX gehts ja irgendwie nicht^^

2) Network
Bisher habe ich es nicht geschafft über einen UDP Socket einen String zu empfangen, senden funktioniert.
Nochmal, geht das ohne Erweiterung überhaupt? (LIB)


3) Thread
Wie kann ich einen Thread löschen/zerstören sodass der Speicher auch freigegeben wird, bzw. ich den Thread
wieder in laufe der Run Time vom Programm wieder neu erstellen kann ohne dass das Programm mehr Speicher wie vorher benutzt.


Ich hoffe ihr könnt mir weiterhelfen Smile

mfg
Myn
  • Zuletzt bearbeitet von Myn am Di, Aug 07, 2012 17:41, insgesamt einmal bearbeitet

ZaP

BeitragDi, Jul 31, 2012 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
1) Was denn, mehrere Sockets (das geht nicht) oder mehrere Verbindungen (das geht)?

Für letzteres erhältst Du mit jedem Accept eine Verbindung, die Du dir irgendwo merken solltest.

2) Natürlich geht das, allerdings anders als bei TCP. Codebeispiele dazu gibt es massenhaft Wink

3) Wenn der Thread beendet wird, sollte der Garbage Collector den Rest tun.
Starfare: Worklog, Website (download)
 

Myn

BeitragDi, Jul 31, 2012 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
1) Da hat vor ein paar Woche nicht so einfach geklappt, ich versuchs dann nochmal würd ich sagen.
Und ja, ich meinte Verbindungen.

2) Muss ich wohl nochmal suchen Surprised

3) Ich meinte das ein bisschen anders.
Angenommen ein thread soll irgendwas Berechnen, allerdings nur ab und zu.
Dann möchte ich den Thread starten / aufrufen, dann berechnet er was und sollte dann halt beendet werden
oder halt zwischen geparkt.. bis er wieder mal was berechnen soll.

BladeRunner

Moderator

BeitragDi, Jul 31, 2012 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist der absolute Normalfall für Threads, wenn sie out of Scope kommen werden sie beendet und der Spreicher dann vom GC freigegeben.
Die verweilen nicht nach Ende ihrer Tätigkeit. Es kann bestenfalls sein dass der GC sie noch nicht abräumt weil es sich noch nicht lohnt aufzuräumen.
(Wenn du DetachThread benutzt geschieht das schliessen des Threads automatisch, ansonsten gibt dir ThreadRunning Auskunft ob Du ihn schliessen (nullen) kannst.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Hummelpups

BeitragMi, Aug 01, 2012 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Socket ist eine bidirektionale Verbindung mit eigener IP und gebunden an einen
Port. Wird dieser Port einmal verwendet, kann er nicht noch einmal
an ein anderes Socket (außer anderer Protokolltyp UDP/TCP) gebunden
werden.

Grüße
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus
 

Myn

BeitragMi, Aug 01, 2012 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, wenn ich so überlege ist und war mir das auch klar...
Ich werde in den nächsten Tagen mal weiter rumprobieren und mich gegebenfalls nochmal hier melden.

Danke für die Hilfe Smile
 

Myn

Betreff: Weiterführung

BeitragDi, Aug 07, 2012 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, es mag vielleicht doof sein, aber ich komme da nicht weiter.

Dieser Beispiel Code verbraucht mit der Zeit ziemlich schnell mehr Arbeitsspeicher.
Hier wurde ja gesagt das ein Thread nach Aufgaben-Ende beendet, bzw. Speicher wieder
freigegeben wird.

Code: [AUSKLAPPEN]

SuperStrict

Local Timer:TTimer=CreateTimer(5)

Repeat

   For Local i:Int=0 To 5 Step 1
      Local newThread:TThread=CreateThread( objectThread, "")
   Next
   
   WaitTimer(Timer)
Forever


Function objectThread:Object( data:Object )
   
EndFunction


Also ganz einfach, was läuft hier falsch Embarassed

//edit: Wie kann ich das regeln, das der Speicher freigegeben wird?

Propellator

BeitragDi, Aug 07, 2012 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir steigt der Arbeitsspeicher nicht stetig. Er steigt und sinkt wieder, da der GC erst nach einer Weile den Arbeitsspeicher wieder frei gibt.

Da jedoch bestimmte Betriebssysteme eine maximale Anzahl an Threads haben (Windows, afair), ist die Benutzung von DetachThread eine gute Idee.

EDIT: Welche BlitzMax Version verwendest du?

EDIT2: Haue ich noch ein manuelles GCCollect() ans Ende der Schleife, verwende DetachThread und benutze nur die Module BRL.Blitz, BRL.Timer sowie BRL.Threads, dann bleibt die Speicherauslastung bei mir sogar grösstenteils konstant.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.
 

Myn

BeitragDi, Aug 07, 2012 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich denn DetachThread benutzen, anhand dieses Beispieles ?

GCCollect() hat voerst nichts verändert.

//edit: Verwende BMAX 1.45 derzeit.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group