Socket-Accept-Problem in Thread
-
Hallo,
ich bei euch kann mir jemand helfen. Und zwar bin ich gerade dran und programmier mir ein kleines Tool für meinen Computer. Dieses Tool soll von einem anderen Tool von mir Daten empfangen.
Dafür verwende ich CSocket. Das funktioniert soweit auch alles (oder auch nicht). Ich starte für meine Socket-Verbindung einen eigenen Thread mittels AfxBeginThread(...)! Dieses Thread startet er auch. Das Problem ist nur, wenn er in diesem Thread bei der Socket-Verbindung beim Accept auf eine Verbindungsanfrage wartet und ich aber nichts schicke und dann das Programm beende, das Programm abschmiert. Irgendwie beendet er Das Hauptfenster bevor er den Thread beendet hat und dann gibt's Speicherzugriffsfehler. Ich kann den den Thread allerdings auch nicht innerhalb des Threads mittels AfxEndThread(...) beenden, da ich ja beim Accept hängenbleibe!
Hat irgendjemand Rat ???
Viele Dank, Stefan
-
Hi,
versuch im Thread statt CSocket mal CAsyncSocket zu verwenden. CSocket verwendet Synchrone - also blockierende - Methoden.
CAsyncSocket::Accept kehrt sofort zurück wenn keine Verbindung ansteht.
Natürlich muss man dann in einer Schleife wiederholt Accept aufrufen, aber hier kann man auch noch ein Abbruch-Flag prüfen und den Thread sauber terminieren. Wenn der Schleife dann noch ein Sleep(100) oder mehr spendiert wird, zieht der Thread auch so gut wie keine CPU last...Gruss