<?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[Indy Übertragung in Thread auslagern]]></title><description><![CDATA[<p>Hey,</p>
<p>ich hab das Problem das meine Rechner während der Indy Übertragung TCPServer-&gt;TCPClient hängen. Der Stream der übertragen wird ist ein Screenshot (jpeg komprimiert) also nur noch ca. 100-200 kb groß.<br />
Das Problem ist weniger die Größe des Streams, das Problem ist das der Stream nach dem er gesendet wurde, gleich erneut gesendet wird (mit einem neuen Screenshot).</p>
<p>Während der Übertragung soll der Client aber noch die Möglichkeit haben auf das Programm zuzugreifen.</p>
<p>Mit IdAntiFreeze bzw. Application-&gt;ProcessMessages() funktioniert das, aber nicht so ganz wie ich es mir vorstelle. Ausserdem ist die CPU immernoch voll ausgelastet.</p>
<p>Aus diesem Grund versuche ich jetzt den Transfer in einen eigenen Thread zu verlagern.<br />
Dazu hab ich mir dieses Beispiel angeschaut: <a href="http://bcb-tutorial.c-plusplus.net/Thread/artikel7.html" rel="nofollow">http://bcb-tutorial.c-plusplus.net/Thread/artikel7.html</a></p>
<p>Nach diesem Beispiel möchte ich meinen Thread auch aufbauen.</p>
<p>Aber sollte ich nicht nur den Transfer sondern die ganze Verbindung über diesen Thread laufen lassen und somit die Indy Komponenten in dem Thread selbst erstellen.</p>
<p>-der Thread gibt den Stream an frm_viewer und wartet/empfängt den nächsten.<br />
-frm_viewer ladet das Bild aus dem Stream und zeigt es an.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178686/indy-übertragung-in-thread-auslagern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 09:20:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178686.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Apr 2007 14:35:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Indy Übertragung in Thread auslagern on Fri, 13 Apr 2007 14:35:00 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>ich hab das Problem das meine Rechner während der Indy Übertragung TCPServer-&gt;TCPClient hängen. Der Stream der übertragen wird ist ein Screenshot (jpeg komprimiert) also nur noch ca. 100-200 kb groß.<br />
Das Problem ist weniger die Größe des Streams, das Problem ist das der Stream nach dem er gesendet wurde, gleich erneut gesendet wird (mit einem neuen Screenshot).</p>
<p>Während der Übertragung soll der Client aber noch die Möglichkeit haben auf das Programm zuzugreifen.</p>
<p>Mit IdAntiFreeze bzw. Application-&gt;ProcessMessages() funktioniert das, aber nicht so ganz wie ich es mir vorstelle. Ausserdem ist die CPU immernoch voll ausgelastet.</p>
<p>Aus diesem Grund versuche ich jetzt den Transfer in einen eigenen Thread zu verlagern.<br />
Dazu hab ich mir dieses Beispiel angeschaut: <a href="http://bcb-tutorial.c-plusplus.net/Thread/artikel7.html" rel="nofollow">http://bcb-tutorial.c-plusplus.net/Thread/artikel7.html</a></p>
<p>Nach diesem Beispiel möchte ich meinen Thread auch aufbauen.</p>
<p>Aber sollte ich nicht nur den Transfer sondern die ganze Verbindung über diesen Thread laufen lassen und somit die Indy Komponenten in dem Thread selbst erstellen.</p>
<p>-der Thread gibt den Stream an frm_viewer und wartet/empfängt den nächsten.<br />
-frm_viewer ladet das Bild aus dem Stream und zeigt es an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265385</guid><dc:creator><![CDATA[t0b4d]]></dc:creator><pubDate>Fri, 13 Apr 2007 14:35:00 GMT</pubDate></item><item><title><![CDATA[Reply to Indy Übertragung in Thread auslagern on Fri, 13 Apr 2007 19:56:11 GMT]]></title><description><![CDATA[<p>Habs hinbekommen, nur jetzt hab ich eine kleine Frage!</p>
<p>Wenn ein Thread terminiert wird ist dann der Zeiger = NULL ?</p>
<p>Ich würde gern den Thread Zeiger erst dann wieder anlegen, wenn der Thread alles abgearbeitet hat.</p>
<p>Den Thread selbst lass ich am Ende von</p>
<p>void __fastcall TVerbindungThread::Execute()</p>
<p>durch</p>
<p>this-&gt;Terminate();</p>
<p>terminieren.</p>
<pre><code>void __fastcall Tfrm_viewer::timer_screenreqTimer(TObject *Sender)
{
timer_screenreq-&gt;Enabled=false;	//verhindert, das eine erneute Screeshotanfrage
											//gestartet wird.
if(cb_autoreq-&gt;Checked)
{
	if(Verbindung == NULL)
	{
		Verbindung = new TVerbindungThread(ip,port,TOut,quali);
	}
}
timer_screenreq-&gt;Enabled=true;	//timer wieder aktivieren
}
//---------------------------------------------------------------------------
</code></pre>
<p>diese Abfrage if(Verbindung == NULL) ... in dem Timer soll verhindern, das der Thread mehr als einmal gleichzeitig gestartet wird. Aber der Startet ihn jetzt nur EINMAL! was mach ich falsch ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265625</guid><dc:creator><![CDATA[t0b4d]]></dc:creator><pubDate>Fri, 13 Apr 2007 19:56:11 GMT</pubDate></item><item><title><![CDATA[Reply to Indy Übertragung in Thread auslagern on Sat, 14 Apr 2007 00:06:00 GMT]]></title><description><![CDATA[<p>ich hab einfach eine neue Variable angelegt und setzte diese wärend der thread läuft auf true und kurtz vor dem return auf false</p>
<p>hab jetzt aber ein neues prob!</p>
<pre><code class="language-cpp">void __fastcall TVerbindungThread::Execute()
{

	TCPClient2-&gt;Connect(TOut);

	if(!TCPClient2-&gt;Connected())
	{
		Synchronize(VerbindungVerloren); // &lt;----wieso geht er hier nie hin?!
	}
...
</code></pre>
<p>Wenn die Verbindung verloren ist, soll der Thread nicht mehr aufgerufen werden.<br />
Aber er geht nicht in die if-Anweisung. bei einem TimeOut beendet er glaub ich sogar aus den Thread ?!</p>
<p>nichtmal ein try ... catch funktioniert!</p>
<pre><code class="language-cpp">try
{
	TCPClient2-&gt;Connect(TOut);
}
catch ( EIdConnectTimeout *E ) // Exception abfanngen
{
	ShowMessage(&quot;Verbindung zum Server verloren!&quot;);
}
</code></pre>
<p>hier <a href="http://kripserver.net/hbfi05a/clients/projekt.rar" rel="nofollow">http://kripserver.net/hbfi05a/clients/projekt.rar</a> könnt ihr euch das ding mal anschaun</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1265760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1265760</guid><dc:creator><![CDATA[t0b4d]]></dc:creator><pubDate>Sat, 14 Apr 2007 00:06:00 GMT</pubDate></item></channel></rss>