<?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[Über Thread Endlosschleife stoppen]]></title><description><![CDATA[<p>Hallo an alle,</p>
<p>vllt. ne dumme Frage, kann schon sein.</p>
<p>ich habe in einer Funktion eine Endlosschleife</p>
<pre><code class="language-cpp">for(;;)
{
    recvfrom(...);
}
</code></pre>
<p>Diese soll halt nach einiger Zeit beendet werden z.B. nach 3min.<br />
oder wenn eine bestimmte Nachricht reinkommt über einen anderen Socket.</p>
<p>Habe mir gedacht. Wenn die Nachricht kommt die das Abbrechen bedingt, setze ne Membervariable Typ bool auf false und frag das ab.</p>
<pre><code class="language-cpp">for(;;)
{
    if(!m_bExit)
    {
        recvfrom(...);
    }
    else
       break;
}

//thread der auf Nachrichten des anderen Sockets wartet
//nur ein Beispiel.

recvfrom(...);
if(msg == &quot;EXIT&quot;)
    myClass-&gt;m_bExit = true;
</code></pre>
<p>Jetzt ist halt das Problem das es bisher so ganz gut funzte...bis jetzt an einem System aufgetaucht ist, das er anscheinend nicht darauf reagiert, sondern sich in der Endlosschleife festfrisst und diese gar nicht mehr verlässt.</p>
<p>Gibt es noch andere Wege eine Endlosschleife von außerhalb einer Funktion zu killen?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261818/über-thread-endlosschleife-stoppen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 02:47:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261818.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Feb 2010 11:40:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Über Thread Endlosschleife stoppen on Wed, 24 Feb 2010 11:40:45 GMT]]></title><description><![CDATA[<p>Hallo an alle,</p>
<p>vllt. ne dumme Frage, kann schon sein.</p>
<p>ich habe in einer Funktion eine Endlosschleife</p>
<pre><code class="language-cpp">for(;;)
{
    recvfrom(...);
}
</code></pre>
<p>Diese soll halt nach einiger Zeit beendet werden z.B. nach 3min.<br />
oder wenn eine bestimmte Nachricht reinkommt über einen anderen Socket.</p>
<p>Habe mir gedacht. Wenn die Nachricht kommt die das Abbrechen bedingt, setze ne Membervariable Typ bool auf false und frag das ab.</p>
<pre><code class="language-cpp">for(;;)
{
    if(!m_bExit)
    {
        recvfrom(...);
    }
    else
       break;
}

//thread der auf Nachrichten des anderen Sockets wartet
//nur ein Beispiel.

recvfrom(...);
if(msg == &quot;EXIT&quot;)
    myClass-&gt;m_bExit = true;
</code></pre>
<p>Jetzt ist halt das Problem das es bisher so ganz gut funzte...bis jetzt an einem System aufgetaucht ist, das er anscheinend nicht darauf reagiert, sondern sich in der Endlosschleife festfrisst und diese gar nicht mehr verlässt.</p>
<p>Gibt es noch andere Wege eine Endlosschleife von außerhalb einer Funktion zu killen?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860493</guid><dc:creator><![CDATA[mr. main]]></dc:creator><pubDate>Wed, 24 Feb 2010 11:40:45 GMT</pubDate></item><item><title><![CDATA[Reply to Über Thread Endlosschleife stoppen on Wed, 24 Feb 2010 11:49:19 GMT]]></title><description><![CDATA[<p>Ist recvfrom nicht blockierend? Weil wenn dem so ist (wovon ich jetzt mal ausgehe), kommt es ja gar nicht zu der Prüfung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860497</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 24 Feb 2010 11:49:19 GMT</pubDate></item><item><title><![CDATA[Reply to Über Thread Endlosschleife stoppen on Wed, 24 Feb 2010 12:08:36 GMT]]></title><description><![CDATA[<p>Nebenbei bemerkt, das Konstrukt</p>
<pre><code class="language-cpp">for(;;)
{
    if(!m_bExit)
    {
        /* ... */
    }
    else
       break;
}
</code></pre>
<p>Kommt recht häufig vor. Dafür gibts sogar ein eigenes Schlüsselwort, was es schon anno dunnemals in C gab:</p>
<pre><code class="language-cpp">while(!m_bExit)
{
  /* ... */
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1860521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860521</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 24 Feb 2010 12:08:36 GMT</pubDate></item><item><title><![CDATA[Reply to Über Thread Endlosschleife stoppen on Wed, 24 Feb 2010 12:11:29 GMT]]></title><description><![CDATA[<p>Oder wenn man unbedingt for benutzen will:</p>
<pre><code class="language-cpp">for(; !m_bExit ;)
{
  //...  
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1860525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860525</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 24 Feb 2010 12:11:29 GMT</pubDate></item><item><title><![CDATA[Reply to Über Thread Endlosschleife stoppen on Wed, 24 Feb 2010 12:29:58 GMT]]></title><description><![CDATA[<p>Ok...ok, das ist schon richtig mit dem</p>
<pre><code class="language-cpp">while(!m_bExit)
{
  /*...*
}
</code></pre>
<p>Hab ich bereits probiert, aber da bekommt er das auch nicht mit.</p>
<p>recvfrom ist über ioctlsocket auf Non-Blocking gesetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860547</guid><dc:creator><![CDATA[mr. main]]></dc:creator><pubDate>Wed, 24 Feb 2010 12:29:58 GMT</pubDate></item><item><title><![CDATA[Reply to Über Thread Endlosschleife stoppen on Wed, 24 Feb 2010 12:49:34 GMT]]></title><description><![CDATA[<p>Ich bin in der Materie noch nicht so 100%ig sicher, aber muss das Flag evtl. volatile sein damit der eine Thread mitkriegt dass der andere drauf geschrieben hat? Sonst kommt doch die Änderung nicht aus dem Cache des einen Prozessors raus und der Hauptspeicher und vor allem der andere Prozessor bekommt nichts davon mit?<br />
Evtl. mal einen Debugger auf den Kopf der while-Schleife setzen udn schauen was passiert. Oder aber bei boost eine condition_variable_any benutzen statt eines bool.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860579</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 24 Feb 2010 12:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to Über Thread Endlosschleife stoppen on Wed, 24 Feb 2010 12:50:48 GMT]]></title><description><![CDATA[<p>Eine stumpfe Ausgabe sollte an der Stelle zumindest zeigen was da genau los ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860580</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 24 Feb 2010 12:50:48 GMT</pubDate></item><item><title><![CDATA[Reply to Über Thread Endlosschleife stoppen on Wed, 24 Feb 2010 12:54:27 GMT]]></title><description><![CDATA[<p>Das Problem ist ja das ich den Fehler auf meinen 2 Testrechnern nicht nachvollziehen kann deswegen bringt debuggen nicht so viel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860583</guid><dc:creator><![CDATA[mr. main]]></dc:creator><pubDate>Wed, 24 Feb 2010 12:54:27 GMT</pubDate></item><item><title><![CDATA[Reply to Über Thread Endlosschleife stoppen on Wed, 24 Feb 2010 12:57:53 GMT]]></title><description><![CDATA[<p>mr. main schrieb:</p>
<blockquote>
<p>Das Problem ist ja das ich den Fehler auf meinen 2 Testrechnern nicht nachvollziehen kann deswegen bringt debuggen nicht so viel.</p>
</blockquote>
<p>Dann musst du dir überlegen was der Unterschied zwischen den Systemen ist (z.B. dein Testrechner nur ein Prozessor mit einem Cache, der andere ein mehrkernprozessor mit mehreren Caches?) und schlimmstenfalls auf dem System wo der Fehler auftaucht (oder auf einem identischen System, gleiches OS, baugleiche Hardware) einen Debugger installieren. Oder es blind versuchen mit den Möglichkeiten die ich aufgelistet hab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860585</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 24 Feb 2010 12:57:53 GMT</pubDate></item><item><title><![CDATA[Reply to Über Thread Endlosschleife stoppen on Wed, 24 Feb 2010 12:59:48 GMT]]></title><description><![CDATA[<p>Ich glaube auf ein volatile kann man sich diesbezüglich nicht verlassen. Dazu gab es hier mal eine Diskussion. Man müsste schon einen Mutex für das bool behmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860589</guid><dc:creator><![CDATA[__Stefan__]]></dc:creator><pubDate>Wed, 24 Feb 2010 12:59:48 GMT</pubDate></item><item><title><![CDATA[Reply to Über Thread Endlosschleife stoppen on Wed, 24 Feb 2010 15:46:05 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<pre><code class="language-cpp">while(!m_bExit)
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1860687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1860687</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Wed, 24 Feb 2010 15:46:05 GMT</pubDate></item></channel></rss>