Hi Alex,
dein Code hat mir wirklich geholfen. Vor allem, da mein Server Aufträge per TCP/IP entgegennimmt, berechnet und die Ergebnisse dann zurücksenden soll. Das mache ich natürlich mit Threads. Um das sicher zu machen, verwende ich die SafeNetwork.pbi aus deinem Projekt (neueste Version von heute Morgen).
Leider schmiert mein Programm immer so nach ca. 1500 bis 2000 Connections und Threads ab und ich weiss nicht warum. Die IDE bleibt im Debugger stehen,
Ungültiger Speicherzugriff. (Schreibfehler an der Adresse 0)Die IDE markiert die gekennzeichnete Zeile in deinem SafeNetwork.pbi:
Code:
Procedure __NetworkServerEvent()
Protected Event, Mutex
Shared __NetworkProtector
With __NetworkProtector
LockMutex(\ECMutex)
Event = NetworkServerEvent() ; <=========== Error happens here
UnlockMutex(\ECMutex)
If Event
(...)
Die Frage ist, ob ich da grundsätzlich was falsch mache.
- Im Haupt-Programm öffne ich mit CreateNetworkServer() die Server-Funktionen.
- Dann fahre ich einen Loop, in dem ich nur das event #PB_NetworkEvent_Connect abfrage.
- Sobald ich das habe, starte ich einen neuen Thread und übergebe die mit EventClient() ermittelte Client-ID and den Thread.
- Im Thread fahre ich dann einen kleinen Loop und frage die Daten mittels ReceiveNetworkData() ab, bis ich mein Endzeichen finde.
- Habe ich das, berechne ich das Ergebnis (1 bis 1500 Millisekunden).
- Dann sende ich das Ergebnis mit SendNetworkString() zurück und beende mit CloseNetworkConnection().
- Dann ist der Thread zu Ende.
Die Frage ist, ob es so ok ist? Geht das oder muss ich was auslagern? Ist die Verarbeitung falsch? Ich bin der Meinung, dass ich alle Verbindungen sauber wieder beende. Die mit EventClient() ermittelte ID zählt von 1 an aufwärts. Meist bei ca. 1500 bis 2000 schmiert die Karre dann ab

[EDIT] Ach ja, ich verwende #SafeNetwork_UseVId = #True und #SafeNetwork_UDPWorkAround = #False[/EDIT]
Grüße,
Kukulkan