asynchrone Sockets
-
Ich will eine kleines Chatprogramm zu testzwecken erstellen.
Eigentlich ist es schon fertig, treibt aber die Systemauslastung auf 100%,
weil ich einen Thread erstellt hab mit einer recv()-Endlosschleife.
Die Alternative sollten asynchrone Sockets sein, aber dazu finde ich keine
Tutorials.
Hat zufällig jemand den Code eines kleinen Chatprogramms auf der Basis der
asynchronen Sockets?
-
Das die CPU-Auslastung auf 100% geht dürfte nicht sein.
Die einzige Möglichkeit die mir dazu einfällt ist dass
du None-Blocking-Sockets verwentetst.
Wenn ja dann musst du ein Sleep einfügen wenn du nichts empfängst:while(1) { i=resv(...);[b] if(i<=0) { Sleep(50); } [/b] ... }Meine Webseite:
-
Woran erkenn ich denn, dass ich das nicht blockende recv() benutze?
-
Wenn du mit dem Socket vorher WSAAsyncSelect() aufgerufen hast oder es mittels ioctlsocket() in den non-blocking modus gesetzt hast.
Außerdem wirst du dann vermutlich hin- und wieder mal SOCKET_ERROR mit WSAEWOULDBLOCK von recv() zurückbekommen.
Im blocking-mode wartet recv() solange bis Daten verfügbar sind - Die CPU-Auslastung geht dabei allerdings NICHT auf 100%
Falls dein Socket im blocking-mode ist, vermute ich den Fehler daher woanders...