<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Programm hängt sich auf]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab mal wieder ein kleines Problem.</p>
<p>Ich habe eine TCPServer-Klasse implementiert, die beim connecten eines Clients die OnClientConnect Methode im <strong>extra</strong> Thread aufruft.</p>
<p>Die OnClientConnect Methode sieht wie folgt aus:</p>
<pre><code>void TelemetryReceiver::OnClientConnect(int clientID)
{
	printf(&quot;ClientID%i\n&quot;,clientID);
	// Client in map speichern
	UDPClientList[clientID] = UDPClient();
        printf(&quot;Nacher&quot;);

}
</code></pre>
<p>Header:</p>
<pre><code>std::map&lt;int, UDPClient&gt; UDPClientList;
</code></pre>
<p>Sobald ich UDPClientList... auskommentiere funktioniert alles wunderbar. Wenn ich diese Funktion ohne Thread ausführe klappt es auch. Komischerweise, gibt er &quot;Nacher&quot; auch noch aus.</p>
<p>Hier wird die Funktion aufgerufen:</p>
<pre><code>void TCPServer::ReceiveClient(int clientSocket)
{
	printf(&quot;Empfangen&quot;);
	_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(&quot;Daten empfangen!&quot;);
		// Ist ein Fehler aufgetreten?
		if(dataLength == -1)
		{
			// Fehlermeldung ausgeben
			perror (&quot;Fehler&quot;);

			// Nicht gut
			throw THOMASException(&quot;Fehler beim Empfangen von Client-Daten!&quot;);
		}

		// Ist die Verbindung abgebrochen?
		if(dataLength == 0)
		{
			// Empfangsfunktion abbrechen
			break;
		}

		// Daten verarbeiten
		_computeReceivedDataFunction(buffer, dataLength, _cRDFParams, clientSocket);
	}

	// Client-Socket schließen
	close(clientSocket);
}
</code></pre>
<p>Liegt dies am seperaten Thread, und wenn ja, wie kann ich das Problem lösen?</p>
<p>Edit:// Scheinbar funktioniert es, allerdings gibt er die Nachrichten mit printf nicht aus. Erst, wenn sich ein neuer Client verbindet.<br />
Es landet also im Buffer. Gibts ne möglichkeit diese Nachricht trotzdem auszugeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/331394/programm-hängt-sich-auf</link><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 16:47:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331394.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Feb 2015 14:40:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programm hängt sich auf on Thu, 26 Feb 2015 14:54:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab mal wieder ein kleines Problem.</p>
<p>Ich habe eine TCPServer-Klasse implementiert, die beim connecten eines Clients die OnClientConnect Methode im <strong>extra</strong> Thread aufruft.</p>
<p>Die OnClientConnect Methode sieht wie folgt aus:</p>
<pre><code>void TelemetryReceiver::OnClientConnect(int clientID)
{
	printf(&quot;ClientID%i\n&quot;,clientID);
	// Client in map speichern
	UDPClientList[clientID] = UDPClient();
        printf(&quot;Nacher&quot;);

}
</code></pre>
<p>Header:</p>
<pre><code>std::map&lt;int, UDPClient&gt; UDPClientList;
</code></pre>
<p>Sobald ich UDPClientList... auskommentiere funktioniert alles wunderbar. Wenn ich diese Funktion ohne Thread ausführe klappt es auch. Komischerweise, gibt er &quot;Nacher&quot; auch noch aus.</p>
<p>Hier wird die Funktion aufgerufen:</p>
<pre><code>void TCPServer::ReceiveClient(int clientSocket)
{
	printf(&quot;Empfangen&quot;);
	_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(&quot;Daten empfangen!&quot;);
		// Ist ein Fehler aufgetreten?
		if(dataLength == -1)
		{
			// Fehlermeldung ausgeben
			perror (&quot;Fehler&quot;);

			// Nicht gut
			throw THOMASException(&quot;Fehler beim Empfangen von Client-Daten!&quot;);
		}

		// Ist die Verbindung abgebrochen?
		if(dataLength == 0)
		{
			// Empfangsfunktion abbrechen
			break;
		}

		// Daten verarbeiten
		_computeReceivedDataFunction(buffer, dataLength, _cRDFParams, clientSocket);
	}

	// Client-Socket schließen
	close(clientSocket);
}
</code></pre>
<p>Liegt dies am seperaten Thread, und wenn ja, wie kann ich das Problem lösen?</p>
<p>Edit:// Scheinbar funktioniert es, allerdings gibt er die Nachrichten mit printf nicht aus. Erst, wenn sich ein neuer Client verbindet.<br />
Es landet also im Buffer. Gibts ne möglichkeit diese Nachricht trotzdem auszugeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2444439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2444439</guid><dc:creator><![CDATA[Waishon]]></dc:creator><pubDate>Thu, 26 Feb 2015 14:54:19 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hängt sich auf on Thu, 26 Feb 2015 15:07:13 GMT]]></title><description><![CDATA[<p>fflush(stdio);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2444442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2444442</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 26 Feb 2015 15:07:13 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hängt sich auf on Thu, 26 Feb 2015 15:29:54 GMT]]></title><description><![CDATA[<p>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&lt;BYTE[]&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2444443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2444443</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Thu, 26 Feb 2015 15:29:54 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hängt sich auf on Thu, 26 Feb 2015 18:39:04 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>fflush(stdio);</p>
</blockquote>
<p>Es war<br />
fflush(stdout);<br />
gemeint.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2444457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2444457</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 26 Feb 2015 18:39:04 GMT</pubDate></item><item><title><![CDATA[Reply to Programm hängt sich auf on Thu, 26 Feb 2015 18:43:43 GMT]]></title><description><![CDATA[<p>Also die 256 buffer Bytes würde ich mir einfach vom Stack nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2444459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2444459</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 26 Feb 2015 18:43:43 GMT</pubDate></item></channel></rss>