<?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[boost thread]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich möchte einen ThreadManager schreiben, der alle Threads verwaltet.<br />
Es soll eine einfache std::list<a href="boost::thread*" rel="nofollow">boost::thread*</a> sein.</p>
<p>Wenn diesem ThreadManager ein Signal gegeben wird, soll er dafür<br />
sorgen, dass sich alle threads beenden. Hierzu möchte ich in jedem<br />
Thread ein Terminate-Flag setzen, damit dieser sich beendet.<br />
Mein Problem ist allerdings, dass ich nicht weiß, wie ich auf das<br />
Objekt (bzw. seine Kopie) zugreife, das ich dem Konstruktor von boost::thread übergeben habe.<br />
Es wird ja (verständlicherweise) eine Kopie dieses Objektes erstellt.<br />
Wie würdet ihr dieses Problem lösen?<br />
Kan ich einfach von boost::thread erben oder muss ich da irgendwelche Probleme<br />
befürchten?</p>
<p>Viele Grüße und schöne Feiertage,<br />
*Cpp-Anfänger*</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/200982/boost-thread</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Apr 2026 22:04:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200982.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Dec 2007 15:42:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost thread on Sat, 22 Dec 2007 15:47:03 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich möchte einen ThreadManager schreiben, der alle Threads verwaltet.<br />
Es soll eine einfache std::list<a href="boost::thread*" rel="nofollow">boost::thread*</a> sein.</p>
<p>Wenn diesem ThreadManager ein Signal gegeben wird, soll er dafür<br />
sorgen, dass sich alle threads beenden. Hierzu möchte ich in jedem<br />
Thread ein Terminate-Flag setzen, damit dieser sich beendet.<br />
Mein Problem ist allerdings, dass ich nicht weiß, wie ich auf das<br />
Objekt (bzw. seine Kopie) zugreife, das ich dem Konstruktor von boost::thread übergeben habe.<br />
Es wird ja (verständlicherweise) eine Kopie dieses Objektes erstellt.<br />
Wie würdet ihr dieses Problem lösen?<br />
Kan ich einfach von boost::thread erben oder muss ich da irgendwelche Probleme<br />
befürchten?</p>
<p>Viele Grüße und schöne Feiertage,<br />
*Cpp-Anfänger*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1424849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1424849</guid><dc:creator><![CDATA[*Cpp-Anfänger* 0]]></dc:creator><pubDate>Sat, 22 Dec 2007 15:47:03 GMT</pubDate></item><item><title><![CDATA[Reply to boost thread on Sat, 22 Dec 2007 17:50:33 GMT]]></title><description><![CDATA[<p>Ich würde das Problem lösen indem du an boost::thread einen Funktor übergibst den du von boost::bind erhältst, indem du einen shared_ptr auf eine Struktur/Class als &quot;this&quot; Zeiger für einen member-function-pointer bindest.<br />
Ca. so:</p>
<pre><code class="language-cpp">struct MyThreadContext
{
    void ThreadFunction()
    {
        for (;;)
        {
            {
                boost::mutex::scoped_lock l(m_mutex);
                if (m_killFlag)
                    break;
            }

            DoSomething();
        }
    }

    void DoSomething()
    {
        // ...
    }

    boost::mutex m_mutex;
    bool m_killFlag;
};

void foo()
{
    boost::shared_ptr&lt;MyThreadContext&gt; context(new MyThreadContext);
    boost::thread th(boost::bind(&amp;MyThreadContext::ThreadFunction, context));

    // ...

    {
        boost::mutex::scoped_lock l(context-&gt;m_mutex);
        context-&gt;m_killFlag = true;
    }
    th.join();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1424885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1424885</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 22 Dec 2007 17:50:33 GMT</pubDate></item><item><title><![CDATA[Reply to boost thread on Sat, 22 Dec 2007 18:57:45 GMT]]></title><description><![CDATA[<p>Die Lösung gefällt mir sehr gut...</p>
<p>Danke hustbaer!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1424925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1424925</guid><dc:creator><![CDATA[*Cpp-Anfänger* 0]]></dc:creator><pubDate>Sat, 22 Dec 2007 18:57:45 GMT</pubDate></item><item><title><![CDATA[Reply to boost thread on Sat, 22 Dec 2007 22:20:33 GMT]]></title><description><![CDATA[<p>Hi hustbaer,</p>
<p>ich glaub das geht so doch nicht, da boost::shared_ptr nicht thread-safe ist...</p>
<p>Der Zugriff erfolgt ja in 2 verschiedenen Threads, oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1424992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1424992</guid><dc:creator><![CDATA[*Cpp-Anfänger* 0]]></dc:creator><pubDate>Sat, 22 Dec 2007 22:20:33 GMT</pubDate></item><item><title><![CDATA[Reply to boost thread on Sat, 22 Dec 2007 22:22:15 GMT]]></title><description><![CDATA[<p><em>Cpp-Anfänger</em> schrieb:</p>
<blockquote>
<p>Hi hustbaer,</p>
<p>ich glaub das geht so doch nicht, da boost::shared_ptr nicht thread-safe ist...</p>
<p>Der Zugriff erfolgt ja in 2 verschiedenen Threads, oder nicht?</p>
</blockquote>
<p>Genau dafür ist der Mutex da <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="😉"
    /><br />
Allerdings müssen noch eventuelle Exceptions usw. abgefangen werden, es ist also eher ein minimalistisches Beispiel. (imho)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1424994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1424994</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Sat, 22 Dec 2007 22:22:15 GMT</pubDate></item><item><title><![CDATA[Reply to boost thread on Sat, 22 Dec 2007 23:56:02 GMT]]></title><description><![CDATA[<p>Danke nochmal für eure Hilfe...</p>
<p>Mir war schon klar, wofür der Mutex ist.<br />
Allerdings in diesem Fall wohl unnötig, da keine Konkurrierenden Schreibzugriffe<br />
stattfinden.<br />
Ich dachte eher an den Moment, wo der Thread beendet wird und<br />
der shared_ptr zerstört wird. Im anderen ursprünglichen Thread besteht aber auch<br />
Zugriff auf den Shared-Pointer.<br />
Naja, der Fehler lag wo anders ^^</p>
<p>Gruß,<br />
*Cpp-Anfänger*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425024</guid><dc:creator><![CDATA[*Cpp-Anfänger* 0]]></dc:creator><pubDate>Sat, 22 Dec 2007 23:56:02 GMT</pubDate></item><item><title><![CDATA[Reply to boost thread on Tue, 25 Dec 2007 06:33:10 GMT]]></title><description><![CDATA[<p>boost::shared_ptr ist sehrwohl threadsafe wenn jeder thread seine eigene kopie des zeigers hat. das beide zeiger auf dasselbe objekt zeigen ist dabei egal.<br />
intern verwendet shared_ptr entweder eine eigene mutex um den shared count zu schützen bzw. einfach interlocked funktionen (je nach boost version, die aktuelle verwendet IIRC unter windows die interlocked funktionen, keine ahnung was z.b. unter linux verwendet wird).</p>
<p>die mutex schliesslich hat mit dem shared_ptr garnix zu tun, die regelt den zugriff auf das kill-flag.<br />
strenggenommen muss die da sein, da ohne die mutex nicht garantiert ist dass die änderung die thread 1 an der variable macht auch für thread 2 &quot;sichtbar&quot; wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425808</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 25 Dec 2007 06:33:10 GMT</pubDate></item></channel></rss>