Seite 1 von 1

CreateNetworkServer() nicht Threadsicher! / Bug?

Verfasst: 17.03.2006 03:23
von Toshy
Hallo.
Noch konnte ich keinen nachvollziehbaren Code erstellen, bin noch nicht dazugekommen und meinen Code kann ich hier nicht komplett reinkopieren. ich versuche das aber noch nachzuliefern.

Zum Problem:
Das erstellen von mehreren Servern bringt kein Problem, auch nicht wenn schon Verbindungen offen sind. Was aber nicht klappt ist nachträglich einen Server zu erstellen, wenn die Netzwerkabfragen in einem extra Thread laufen. CreateNetworkServer() bleibt dann einfach hängen.

Na da habe ich es doch noch geschafft(getestet unter Win98 und XP, PB4b6):

Code: Alles auswählen

OpenConsole()
InitNetwork()
s1.l = CreateNetworkServer(#PB_Any, 2222 )
PrintN("s1="+Str(s1))

Procedure net(p.l)
   PrintN("go")
   Repeat
      NetworkServerEvent.b = NetworkServerEvent() 
      If NetworkServerEvent > 0
         ServerId.l = EventServer()
         ClientID.l = EventClient()
        
         PrintN("ClientID="+Str(ClientID))
      EndIf
   Until 0
   PrintN("Error")
EndProcedure
CreateThread(@net(),0)

Delay(3000)
cid.l = OpenNetworkConnection("127.0.0.1",2222)
cid.l = OpenNetworkConnection("127.0.0.1",2222)
cid.l = OpenNetworkConnection("127.0.0.1",2222)
;PrintN("cid="+Str(cid))

PrintN("Erstelle 2. Server")
s2.l = CreateNetworkServer(#PB_Any, 2223 )
PrintN("geht doch")
PrintN("s2="+Str(s2))


Delay(1000*30)
CloseConsole()
[edit]
Dank HeX0R ist mir was aufgefallen.
Der Fehler tritt auf wenn man in den Projekteinstellungen folgendes aktiviert hat:

Thread safe executable

Gruß Toshy

Verfasst: 17.03.2006 10:20
von HeX0R
Bei mir hier im G'schäft (Win98) bleibt da nix hängen

Re: CreateNetworkServer() nicht Threadsicher! / Bug?

Verfasst: 17.03.2006 17:00
von HeX0R
Toshy hat geschrieben: Der Fehler tritt auf wenn man in den Projekteinstellungen folgendes aktiviert hat:
Thread safe executable
Bestätigt!
Ich glaube dieser Punkt ist eh noch nicht ausgereift.
Hatte die Option mal spasseshalber angemacht und irgendein beliebiges Projekt von mir kompiliert, was dann einen Invalid Memory Error zur Folge hatte.
Da ich aber vermutlich ohne diese Funktion auskommen werde (mitlerweile hab ich mir eh angewöhnt keine Strings in Threads zu verwenden, ein threadsicherer Befehlssatz ist für mich also genug), war mir das wieder entfallen ;) .

Verfasst: 17.03.2006 17:16
von Nik
Ok habs im englischen Forum gepostet

Verfasst: 17.03.2006 17:22
von Toshy
Danke.
Gruß
Toshy