Programm hängt sich auf
-
Hallo,
ich hab mal wieder ein kleines Problem.
Ich habe eine TCPServer-Klasse implementiert, die beim connecten eines Clients die OnClientConnect Methode im extra Thread aufruft.
Die OnClientConnect Methode sieht wie folgt aus:
void TelemetryReceiver::OnClientConnect(int clientID) { printf("ClientID%i\n",clientID); // Client in map speichern UDPClientList[clientID] = UDPClient(); printf("Nacher"); }
Header:
std::map<int, UDPClient> UDPClientList;
Sobald ich UDPClientList... auskommentiere funktioniert alles wunderbar. Wenn ich diese Funktion ohne Thread ausführe klappt es auch. Komischerweise, gibt er "Nacher" auch noch aus.
Hier wird die Funktion aufgerufen:
void TCPServer::ReceiveClient(int clientSocket) { printf("Empfangen"); _onClientConnectFunction(clientSocket, _cRDFParams); // Solange kein Abbruchbefehl kommt, Daten empfangen int dataLength; const int bufferLength = 256; BYTE *buffer = new BYTE[bufferLength]; while(_listening) { // Daten empfangen, währenddessen blockieren dataLength = recv(clientSocket, buffer, bufferLength, 0); printf("Daten empfangen!"); // Ist ein Fehler aufgetreten? if(dataLength == -1) { // Fehlermeldung ausgeben perror ("Fehler"); // Nicht gut throw THOMASException("Fehler beim Empfangen von Client-Daten!"); } // Ist die Verbindung abgebrochen? if(dataLength == 0) { // Empfangsfunktion abbrechen break; } // Daten verarbeiten _computeReceivedDataFunction(buffer, dataLength, _cRDFParams, clientSocket); } // Client-Socket schließen close(clientSocket); }
Liegt dies am seperaten Thread, und wenn ja, wie kann ich das Problem lösen?
Edit:// Scheinbar funktioniert es, allerdings gibt er die Nachrichten mit printf nicht aus. Erst, wenn sich ein neuer Client verbindet.
Es landet also im Buffer. Gibts ne möglichkeit diese Nachricht trotzdem auszugeben?
-
fflush(stdio);
-
Mal so nebenbei: Du hast zum einen buffer nicht geloescht und zum anderen kann es passieren, dass du mit throw rausspringst und dadurch das delete ueberspringst. Benutze std::vector oder in seltenen Faellen auch unique_ptr<BYTE[]>.
-
manni66 schrieb:
fflush(stdio);
Es war
fflush(stdout);
gemeint.
-
Also die 256 buffer Bytes würde ich mir einfach vom Stack nehmen.