<?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[Konstraktor nochmal aufrufen? (boost::thread)]]></title><description><![CDATA[<p>Ich frage mich gerade wozu bei der Thread Klasse von der Boost Library ein Konstruktor exitiert, bei dem man keine Funktion übergibt. Es würde Sinn ergeben, wenn man sagt, dass man zuerst die Instanz erstellt und später erst die Funktion für den Thread an eine Funktion der Klasse übergibt. Aber so eine Funtkion kann ich nicht finden. Also müsste ich eigentlich den zweiten Konstruktor nochmal aufrufen. Ich hoffe ihr versteht mein Problem. Hier Beispiel wie ich das meine (pseudo code):</p>
<pre><code class="language-cpp">void bla() {}
int main()
{
	boost::thread asd(&amp;bla);
}
</code></pre>
<p>Hier ist ja alles in Ordnung. Aber jetzt will ich den Thread in einem anderen Gültigkeits bereich starten:</p>
<pre><code class="language-cpp">void bla() {}
void blaexe (boost::thread &amp;asd) { // Hier soll der Thread gestartet werden }
int main()
{
boost::thread bla(); // Hier noch nicht
blaexe();
// Hier dann sonstiger Kram
}
</code></pre>
<p>Wie kann ich jetzt den Thread starten ohne ihn beim erstellen der Instanz zu übergeben???</p>
<p>Hier der Link: <a href="http://boost.org/doc/html/thread.html" rel="nofollow">http://boost.org/doc/html/thread.html</a></p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/131011/konstraktor-nochmal-aufrufen-boost-thread</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 00:24:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/131011.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Dec 2005 23:08:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Thu, 29 Dec 2005 23:09:28 GMT]]></title><description><![CDATA[<p>Ich frage mich gerade wozu bei der Thread Klasse von der Boost Library ein Konstruktor exitiert, bei dem man keine Funktion übergibt. Es würde Sinn ergeben, wenn man sagt, dass man zuerst die Instanz erstellt und später erst die Funktion für den Thread an eine Funktion der Klasse übergibt. Aber so eine Funtkion kann ich nicht finden. Also müsste ich eigentlich den zweiten Konstruktor nochmal aufrufen. Ich hoffe ihr versteht mein Problem. Hier Beispiel wie ich das meine (pseudo code):</p>
<pre><code class="language-cpp">void bla() {}
int main()
{
	boost::thread asd(&amp;bla);
}
</code></pre>
<p>Hier ist ja alles in Ordnung. Aber jetzt will ich den Thread in einem anderen Gültigkeits bereich starten:</p>
<pre><code class="language-cpp">void bla() {}
void blaexe (boost::thread &amp;asd) { // Hier soll der Thread gestartet werden }
int main()
{
boost::thread bla(); // Hier noch nicht
blaexe();
// Hier dann sonstiger Kram
}
</code></pre>
<p>Wie kann ich jetzt den Thread starten ohne ihn beim erstellen der Instanz zu übergeben???</p>
<p>Hier der Link: <a href="http://boost.org/doc/html/thread.html" rel="nofollow">http://boost.org/doc/html/thread.html</a></p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/952497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/952497</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Thu, 29 Dec 2005 23:09:28 GMT</pubDate></item><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Fri, 30 Dec 2005 08:14:12 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Ich frage mich gerade wozu bei der Thread Klasse von der Boost Library ein Konstruktor exitiert, bei dem man keine Funktion übergibt.</p>
</blockquote>
<p>boost Doku schrieb:</p>
<blockquote>
<p>Effects: Constructs a thread object representing the current thread of execution.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/952547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/952547</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 30 Dec 2005 08:14:12 GMT</pubDate></item><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Fri, 30 Dec 2005 14:33:46 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Wie kann ich jetzt den Thread starten ohne ihn beim erstellen der Instanz zu übergeben???</p>
</blockquote>
<p>Indem Du ihn erst dann anlegst, wenn Du ihn brauchst. Damit nicht vorschnell der Destruktor des Threads aufgerufen wird, packst Du ihn am besten in eine Klasse oder Struct.</p>
<pre><code class="language-cpp">void bla() {}
struct blaexe
{ 
    blaexe()
        : m_thrd( &amp;bla ) // Hier wird der Thread gestartet
    {}
private:
    boost::thread m_thrd;
};
int main()
{
    blaexe einBlaexe;
    // Hier dann sonstiger Kram
}
</code></pre>
<p>irgendwie so</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/952790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/952790</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 30 Dec 2005 14:33:46 GMT</pubDate></item><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Fri, 30 Dec 2005 14:40:48 GMT]]></title><description><![CDATA[<p>Wofür gibt es den Default-Konstruktor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/952805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/952805</guid><dc:creator><![CDATA[?????????????]]></dc:creator><pubDate>Fri, 30 Dec 2005 14:40:48 GMT</pubDate></item><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Fri, 30 Dec 2005 14:57:27 GMT]]></title><description><![CDATA[<p>Ehm, hat doch Bashar gepostet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/952831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/952831</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 30 Dec 2005 14:57:27 GMT</pubDate></item><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Fri, 30 Dec 2005 17:52:06 GMT]]></title><description><![CDATA[<blockquote>
<p>Indem Du ihn erst dann anlegst, wenn Du ihn brauchst. Damit nicht vorschnell der Destruktor des Threads aufgerufen wird, packst Du ihn am besten in eine Klasse oder Struct.</p>
</blockquote>
<p>Also ich meine jetzt eigentlich, dass der Thread in einem anderen Gültigkeitsbereich erstellt wird, als in dem er gebraucht wird. Soll heißen, wenn ich den Thread in der blaexe() Funktion erstelle, wird er ja durch den Dekonstruktor automatisch zerstört und ich kann ihn dann z.B. nicht mehr in der Main benutzen. Er soll dann aber noch weiter laufen. Und wenn ich aus blaexe eine Struktur mache, löst das ja mein Problem noch nicht. Ich könnte die thread Klasse static machen, aber ich glaube das ist nicht die Ideallösung. Kann ich einen Thread wirklich nur über den Konstraktor erstellen? Anscheinend ja, weil wofür der Konstruktor ohne Parameter ist, hab ich jetzt verstanden.</p>
<p>Wie lässt sich das Problem lösen?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/952999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/952999</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 30 Dec 2005 17:52:06 GMT</pubDate></item><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Fri, 30 Dec 2005 20:00:14 GMT]]></title><description><![CDATA[<p>Das Thread-Objekt ist ein Objekt wie jedes andere. Wenn es nicht nach verlassen eines Gültigkeitsbereiches zerstört werden soll, was machen wir da in C++? Genau, wir erzeugen ein Objekt auf dem Heap mit new und schleppen den Pointer solange rum bis wir es nicht mehr brauchen. Ob du das Thread-Objekt jetzt direkt mit new instanzierst oder in einem anderen Objekt kapselst, und ebend dieses dynamisch erzeugst, ist eine Design-Entscheidung.</p>
<pre><code class="language-cpp">boost::thread* foo() {
  return new boost::thread(xyz);
}
</code></pre>
<p>Dann gibts da ja noch die Möglichkeit die Threads in einem Vector zu sammeln und den Vector rumzuschleppen.</p>
<pre><code class="language-cpp">thread_vec.push_back(new boost::thread(xyz));
</code></pre>
<p>Du siehst, Thread-Objekte mußt du wie alle anderen Objekte behandeln.</p>
<p>Insofern ist hier keine Patentlösung präsentierbar. Kannste nämlich auch in einer Factory erzeugen, deine Threads. Mußt du selber entscheiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/953053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/953053</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 30 Dec 2005 20:00:14 GMT</pubDate></item><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Fri, 30 Dec 2005 20:05:17 GMT]]></title><description><![CDATA[<p>Danke Artchi! Darauf bin ich gar nicht gekommen! Okay Problem gelöst.</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/953056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/953056</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 30 Dec 2005 20:05:17 GMT</pubDate></item><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Fri, 30 Dec 2005 20:39:12 GMT]]></title><description><![CDATA[<p>Bei der Lösung des Problems bin ich gerade wieder auf das Problem gestoßen! Ich möchte keinen normalen Zeiger nehmen, sondern einen std::auto_ptr Zeiger. Leider muss ich dort wieder über den Konstraktor den entsprechenden Zeiger übergeben. Da hab ich dann erstmal 0 gemacht, weil wenn der Thread gar nicht erstellt würde delete nichts macht.<br />
Aber wie setze ich jetzt den zeiger nachträglich bei auto_ptr?<br />
Ich habe mir das so gedacht:</p>
<pre><code class="language-cpp">auto_ptrZeiger = new boost::thread(boost::bind(par1, par2, par3, &amp;par4));
</code></pre>
<p>Allerdings erwartet der operator= ein weiteres auto_ptr Objekt und ein cast bringt hier nichts. Außerdem habe ich wieso gehört, dass sich der operator= von auto_ptr anders als gewöhnlich verhält.<br />
Hat jemand ne Referenz zu auto_ptr? Ich habe auf <a href="http://cppreference.com" rel="nofollow">cppreference.com</a> und bei google schon gesucht, aber da war nur die Grundfunktion über den Konstruktor <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/953095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/953095</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 30 Dec 2005 20:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Fri, 30 Dec 2005 20:46:10 GMT]]></title><description><![CDATA[<p>Artchi boost::thread ist aber von noncopyable abgeleitet, da wird das mit std::vector problematisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/953103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/953103</guid><dc:creator><![CDATA[..]]></dc:creator><pubDate>Fri, 30 Dec 2005 20:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Fri, 30 Dec 2005 21:26:25 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">auto_ptrZeiger = new boost::thread(boost::bind(par1, par2, par3, &amp;par4));
</code></pre>
<p>Allerdings erwartet der operator= ein weiteres auto_ptr Objekt und ein cast bringt hier nichts.</p>
</blockquote>
<p>Es <strong>würde</strong> schon so gehen:</p>
<pre><code class="language-cpp">p = auto_ptr&lt;boost::thread&gt;(new boost::thread(boost::bind(par1, par2, par3, &amp;par4)));
</code></pre>
<p>aber besser ist die reset-Methode:</p>
<pre><code class="language-cpp">p.reset(new boost::thread(boost::bind(par1, par2, par3, &amp;par4)));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/953127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/953127</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 30 Dec 2005 21:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to Konstraktor nochmal aufrufen? (boost::thread) on Fri, 30 Dec 2005 21:33:33 GMT]]></title><description><![CDATA[<p>Ah danke! Genau die Funktion hab ich gesucht.</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/953131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/953131</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 30 Dec 2005 21:33:33 GMT</pubDate></item></channel></rss>