<?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[[solved] boost::thread - Memberfunktion]]></title><description><![CDATA[<p>Hi Leute,<br />
Ich hoffe einer von euch kann mir sagen wie ich eine Memberfunktion einer Klasse mit boost::thread ausführen kann.<br />
Ich habe es bereits so versucht:</p>
<pre><code>class my_class{

my_class(){
boost::thread TCP(boost::bind(&amp;my_class::my_thread,this));
}
void *my_thread(void){
   while(true){
   //mach was
  }
}

};
</code></pre>
<p>aber leider kommen immer unmengen Fehler</p>
<p>Ach ja und mit static hab ich es auch versucht, aber dann kann ich queue&lt;string&gt; my_queue;<br />
im Thread nicht verwenden</p>
<p>MFG XBert</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229122/solved-boost-thread-memberfunktion</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 02:18:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229122.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 07 Dec 2008 21:36:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Tue, 09 Dec 2008 19:40:36 GMT]]></title><description><![CDATA[<p>Hi Leute,<br />
Ich hoffe einer von euch kann mir sagen wie ich eine Memberfunktion einer Klasse mit boost::thread ausführen kann.<br />
Ich habe es bereits so versucht:</p>
<pre><code>class my_class{

my_class(){
boost::thread TCP(boost::bind(&amp;my_class::my_thread,this));
}
void *my_thread(void){
   while(true){
   //mach was
  }
}

};
</code></pre>
<p>aber leider kommen immer unmengen Fehler</p>
<p>Ach ja und mit static hab ich es auch versucht, aber dann kann ich queue&lt;string&gt; my_queue;<br />
im Thread nicht verwenden</p>
<p>MFG XBert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626697</guid><dc:creator><![CDATA[XBert]]></dc:creator><pubDate>Tue, 09 Dec 2008 19:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Sun, 07 Dec 2008 22:22:14 GMT]]></title><description><![CDATA[<p>XBert schrieb:</p>
<blockquote>
<p>aber leider kommen immer unmengen Fehler</p>
</blockquote>
<p>... die aber streng geheim sind, und die du niemandem hier verrätst <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>
<p>Der Code, den du gepostet hast, ist zwar nicht unbedingt schön, aber zumindest auch nicht falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626721</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Sun, 07 Dec 2008 22:22:14 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Mon, 08 Dec 2008 08:16:51 GMT]]></title><description><![CDATA[<p>Hallo XBert,<br />
versuch's mal damit:</p>
<pre><code class="language-cpp">#include &lt;boost/thread/thread.hpp&gt;
#include &lt;boost/bind.hpp&gt;

class my_class {
public:
    my_class()
        : m_thread( boost::bind(&amp;my_class::my_thread,this) ) // warning: 'this' : used in base member initializer list
    {}
    ~my_class() // optional
    {
        m_thread.join();
    }

private:
    void my_thread() {
        for(;;){
            //mach was
        }
    }
    // --   Member
    boost::thread m_thread; // muss letzter Member in 'my_class' sein!
};
</code></pre>
<p>:xmas2: Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626809</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Mon, 08 Dec 2008 08:16:51 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Mon, 08 Dec 2008 09:23:05 GMT]]></title><description><![CDATA[<p>Werner_logoff schrieb:</p>
<blockquote>
<pre><code class="language-cpp">boost::thread m_thread; // muss letzter Member in 'my_class' sein!
</code></pre>
</blockquote>
<p>Warum muß das so sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626827</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Mon, 08 Dec 2008 09:23:05 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Mon, 08 Dec 2008 09:28:54 GMT]]></title><description><![CDATA[<p>dooooomi schrieb:</p>
<blockquote>
<p>Werner_logoff schrieb:</p>
<blockquote>
<pre><code class="language-cpp">boost::thread m_thread; // muss letzter Member in 'my_class' sein!
</code></pre>
</blockquote>
<p>Warum muß das so sein?</p>
</blockquote>
<p>Das muss sein, weil boost::thread beim Start des Thread sofort die Memberfunktion this-&gt;my_thread() ausführt (mit &quot;this&quot; aus dem zweiten Parameter an m_thread in der Initialisierungsliste). Dadurch wird eine Memberfunktion von my_class ausgeführt, die evtl. Daten von my_class verwendet oder verändert, bevor der Konstruktorrumpf von my_class erreicht wird. Wäre m_thread nicht der letzte Member, würden diese Daten evtl. verwendet oder verändert, bevor sie initialisiert wurden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626829</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 08 Dec 2008 09:28:54 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Mon, 08 Dec 2008 10:17:36 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Das muss sein, weil boost::thread beim Start des Thread sofort die Memberfunktion this-&gt;my_thread() ausführt (mit &quot;this&quot; aus dem zweiten Parameter an m_thread in der Initialisierungsliste). Dadurch wird eine Memberfunktion von my_class ausgeführt, die evtl. Daten von my_class verwendet oder verändert, bevor der Konstruktorrumpf von my_class erreicht wird. Wäre m_thread nicht der letzte Member, würden diese Daten evtl. verwendet oder verändert, bevor sie initialisiert wurden.</p>
</blockquote>
<p>Ok, das ergibt Sinn. Allerdings dürfte das dann auch nur die halbe Wahrheit sein, schließlich ist es nicht immer möglich, alle Member per Initialisierungsliste zu initialisieren. Und sollte der Thread virtuelle Funktionen der Klasse benutzen, darf er sowieso erst nach dem Konstruktor gestartet werden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626860</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Mon, 08 Dec 2008 10:17:36 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Mon, 08 Dec 2008 10:25:02 GMT]]></title><description><![CDATA[<p>dooooomi schrieb:</p>
<blockquote>
<p>Ok, das ergibt Sinn. Allerdings dürfte das dann auch nur die halbe Wahrheit sein, schließlich ist es nicht immer möglich, alle Member per Initialisierungsliste zu initialisieren.</p>
</blockquote>
<p>Sie sind aber wenigstens schon konstruiert und Operationen darauf damit (hoffentlich) definiert. Eine Operation auf einem nicht initialierten Objekt dürfte sehr schnell völlig unvorhersebares Verhalten hervorrufen.</p>
<blockquote>
<p>Und sollte der Thread virtuelle Funktionen der Klasse benutzen, darf er sowieso erst nach dem Konstruktor gestartet werden...</p>
</blockquote>
<p>Ich bin mir auch nicht sicher, ob der Ausdruck (*this).my_class::my_thread() nicht auch noch dann undefiniert ist, wenn der Thread losläuft, bevor der Konstruktorrumpf von my_class erreicht wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626861</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 08 Dec 2008 10:25:02 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Mon, 08 Dec 2008 10:36:28 GMT]]></title><description><![CDATA[<p>Man kann hier auch einfach nen boost::scoped_ptr<a href="boost::thread" rel="nofollow">boost::thread</a> verwenden, dann kann man den Thread ganz normal im &quot;Rumpf&quot; des ctors starten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626868</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 08 Dec 2008 10:36:28 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Mon, 08 Dec 2008 17:20:58 GMT]]></title><description><![CDATA[<p>Leider funktioniert das oben gepostete Beispiel auch nicht!</p>
<p>Ich kompiliere unter Ubuntu mit</p>
<pre><code>g++ test2.cpp -o test2
</code></pre>
<p>Die Fehlermeldung ist folgende:</p>
<pre><code>/tmp/ccVLzgEt.o: In function `boost::mutex::mutex()':
test2.cpp:(.text._ZN5boost5mutexC1Ev[boost::mutex::mutex()]+0x45): undefined reference to `boost::thread_resource_error::thread_resource_error()'
test2.cpp:(.text._ZN5boost5mutexC1Ev[boost::mutex::mutex()]+0x4d): undefined reference to `boost::thread_resource_error::~thread_resource_error()'
test2.cpp:(.text._ZN5boost5mutexC1Ev[boost::mutex::mutex()]+0x55): undefined reference to `typeinfo for boost::thread_resource_error'
/tmp/ccVLzgEt.o: In function `boost::detail::thread_data&lt;boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt; &gt;::~thread_data()':
test2.cpp:(.text._ZN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv8my_classEENS2_5list1INS2_5valueIPS6_EEEEEEED0Ev[boost::detail::thread_data&lt;boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt; &gt;::~thread_data()]+0x16): undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/tmp/ccVLzgEt.o: In function `boost::detail::thread_data&lt;boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt; &gt;::~thread_data()':
test2.cpp:(.text._ZN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv8my_classEENS2_5list1INS2_5valueIPS6_EEEEEEED1Ev[boost::detail::thread_data&lt;boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt; &gt;::~thread_data()]+0x16): undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/tmp/ccVLzgEt.o: In function `boost::condition_variable::condition_variable()':
test2.cpp:(.text._ZN5boost18condition_variableC1Ev[boost::condition_variable::condition_variable()]+0x3a): undefined reference to `boost::thread_resource_error::thread_resource_error()'
test2.cpp:(.text._ZN5boost18condition_variableC1Ev[boost::condition_variable::condition_variable()]+0x42): undefined reference to `boost::thread_resource_error::~thread_resource_error()'
test2.cpp:(.text._ZN5boost18condition_variableC1Ev[boost::condition_variable::condition_variable()]+0x4a): undefined reference to `typeinfo for boost::thread_resource_error'
/tmp/ccVLzgEt.o: In function `boost::detail::thread_data_base::thread_data_base()':
test2.cpp:(.text._ZN5boost6detail16thread_data_baseC2Ev[boost::detail::thread_data_base::thread_data_base()]+0x1b): undefined reference to `vtable for boost::detail::thread_data_base'
/tmp/ccVLzgEt.o: In function `boost::thread::thread&lt;boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt; &gt;(boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt;, boost::disable_if&lt;boost::is_convertible&lt;boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt;&amp;, boost::detail::thread_move_t&lt;boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt; &gt; &gt;, boost::thread::dummy*&gt;::type)':
test2.cpp:(.text._ZN5boost6threadC1INS_3_bi6bind_tIvNS_4_mfi3mf0Iv8my_classEENS2_5list1INS2_5valueIPS6_EEEEEEEET_NS_10disable_ifINS_14is_convertibleIRSE_NS_6detail13thread_move_tISE_EEEEPNS0_5dummyEE4typeE[boost::thread::thread&lt;boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt; &gt;(boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt;, boost::disable_if&lt;boost::is_convertible&lt;boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt;&amp;, boost::detail::thread_move_t&lt;boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt; &gt; &gt;, boost::thread::dummy*&gt;::type)]+0x40): undefined reference to `boost::thread::start_thread()'
/tmp/ccVLzgEt.o: In function `my_class::~my_class()':
test2.cpp:(.text._ZN8my_classD1Ev[my_class::~my_class()]+0xf): undefined reference to `boost::thread::join()'
test2.cpp:(.text._ZN8my_classD1Ev[my_class::~my_class()]+0x20): undefined reference to `boost::thread::~thread()'
test2.cpp:(.text._ZN8my_classD1Ev[my_class::~my_class()]+0x40): undefined reference to `boost::thread::~thread()'
/tmp/ccVLzgEt.o:(.rodata._ZTIN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf0Iv8my_classEENS2_5list1INS2_5valueIPS6_EEEEEEEE[typeinfo for boost::detail::thread_data&lt;boost::_bi::bind_t&lt;void, boost::_mfi::mf0&lt;void, my_class&gt;, boost::_bi::list1&lt;boost::_bi::value&lt;my_class*&gt; &gt; &gt; &gt;]+0x8): undefined reference to `typeinfo for boost::detail::thread_data_base'
collect2: ld gab 1 als Ende-Status zurück
</code></pre>
<p>MFG XBert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627135</guid><dc:creator><![CDATA[XBert]]></dc:creator><pubDate>Mon, 08 Dec 2008 17:20:58 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Mon, 08 Dec 2008 18:28:34 GMT]]></title><description><![CDATA[<p>XBert schrieb:</p>
<blockquote>
<p>Leider funktioniert das oben gepostete Beispiel auch nicht!</p>
<p>Ich kompiliere unter Ubuntu mit</p>
<pre><code>g++ test2.cpp -o test2
</code></pre>
</blockquote>
<p>Du mußt gegen die Library linken, da Boost.Thread im Gegensatz zu vielen anderen Boost Libraries nicht nur aus Header-Files besteht.</p>
<p>Damit sollte es gehen:</p>
<pre><code>g++ test2.cpp -o test2 -lboost_thread-mt
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1627182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627182</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Mon, 08 Dec 2008 18:28:34 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Mon, 08 Dec 2008 19:09:12 GMT]]></title><description><![CDATA[<p>Ich finde es aber auch sehr gewagt, Annahmen zu machen, wann ein Member initialisiert wird.<br />
Meines achtens ist die Lösung auch nicht so optimal!</p>
<p>Gruß<br />
tHOMY :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627203</guid><dc:creator><![CDATA[Thomy]]></dc:creator><pubDate>Mon, 08 Dec 2008 19:09:12 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Mon, 08 Dec 2008 19:37:05 GMT]]></title><description><![CDATA[<p>Thomy schrieb:</p>
<blockquote>
<p>Ich finde es aber auch sehr gewagt, Annahmen zu machen, wann ein Member initialisiert wird.<br />
Meines achtens ist die Lösung auch nicht so optimal!</p>
</blockquote>
<p>Naja, gewagt ist das eigentlich nicht, denn die Reihenfolge der Initialisierung ist schließlich im C++-Standard klar definiert. Member in der Reihenfolge, in der sie in der Klassendefinition stehen (nicht die Reihenfolge der Initialisierungsliste!), Basisklassen vorher, abgeleitete Klassen hinterher.<br />
Man muß sich dessen nur bewußt sein, sollte man irgendwann mal die Member der Klasse komplett umkrempeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627226</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Mon, 08 Dec 2008 19:37:05 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Mon, 08 Dec 2008 19:53:30 GMT]]></title><description><![CDATA[<p>Okay, stimmt, im Standard steht es fest. Hätte ich nicht gedacht! <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 />
Es macht den Code nicht gerade verständlich! Und wenn man das so schreibt und andere die Klasse dann evtl. ändern,<br />
hat man mit hoher Sicherheit ein Problem. Gerade in größeren Projekten kommt es bei solchen Dingen oft zu Problemen.<br />
Deswegen finde ich das wieder gewagt. :p</p>
<p>Ich versuche solche Reihenfolge-, Speicherbereich- Dinger immer zu vermeiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627231</guid><dc:creator><![CDATA[Thomy]]></dc:creator><pubDate>Mon, 08 Dec 2008 19:53:30 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] boost::thread - Memberfunktion on Tue, 09 Dec 2008 19:40:14 GMT]]></title><description><![CDATA[<p>dooooomi schrieb:</p>
<blockquote>
<p>Damit sollte es gehen:</p>
<pre><code>g++ test2.cpp -o test2 -lboost_thread-mt
</code></pre>
</blockquote>
<p>Danke, damit funktioniert es</p>
<p>MFG XBert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1627828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1627828</guid><dc:creator><![CDATA[XBert]]></dc:creator><pubDate>Tue, 09 Dec 2008 19:40:14 GMT</pubDate></item></channel></rss>