<?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[Thread in Konstonstruktor starten]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich weiß das die Frage recht simpel sein muss und ich eigentlich nicht hier danach fragen wollte. Aber nun habe ich schon einige Stunden danach gesucht und bin zu keinem Ergebniss gekommen. Die Suchmaschine meines Vertrauens hat mir nicht weiter geholfen, eben so wenig die zahlreichen YT Videos.</p>
<p>Ich möchte in dem Konstruktor einer Klasse einen Thread starten welcher später im Destruktor gejoint wird. Dazu müsste ich ja den Thread vorher in der Klasse deklarieren, da er sonst ein Lokales Objekt in dem Konstruktor ist und im Destruktor nicht mehr bekannt. Wie kann ich das realisieren, dass der Thread einfach die ganze Zeit läuft solange die Instanz der Klasse existiert?</p>
<p>Dazu habe ich die Klasse &quot;thread&quot; verwendet aus dem c++11 Standard.</p>
<p>Hier im Forum habe ich folgenden Beitrag gefunden, welcher vom Titel her intressant war aber mir leider nicht weiter geholfen hat.<br />
<a href="https://www.c-plusplus.net/forum/331562?highlight=thread+klasse">https://www.c-plusplus.net/forum/331562?highlight=thread+klasse</a></p>
<p>MfG,<br />
Rarebit.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/333722/thread-in-konstonstruktor-starten</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 18:21:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333722.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Jul 2015 15:06:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread in Konstonstruktor starten on Mon, 27 Jul 2015 15:06:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich weiß das die Frage recht simpel sein muss und ich eigentlich nicht hier danach fragen wollte. Aber nun habe ich schon einige Stunden danach gesucht und bin zu keinem Ergebniss gekommen. Die Suchmaschine meines Vertrauens hat mir nicht weiter geholfen, eben so wenig die zahlreichen YT Videos.</p>
<p>Ich möchte in dem Konstruktor einer Klasse einen Thread starten welcher später im Destruktor gejoint wird. Dazu müsste ich ja den Thread vorher in der Klasse deklarieren, da er sonst ein Lokales Objekt in dem Konstruktor ist und im Destruktor nicht mehr bekannt. Wie kann ich das realisieren, dass der Thread einfach die ganze Zeit läuft solange die Instanz der Klasse existiert?</p>
<p>Dazu habe ich die Klasse &quot;thread&quot; verwendet aus dem c++11 Standard.</p>
<p>Hier im Forum habe ich folgenden Beitrag gefunden, welcher vom Titel her intressant war aber mir leider nicht weiter geholfen hat.<br />
<a href="https://www.c-plusplus.net/forum/331562?highlight=thread+klasse">https://www.c-plusplus.net/forum/331562?highlight=thread+klasse</a></p>
<p>MfG,<br />
Rarebit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2461171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2461171</guid><dc:creator><![CDATA[Rarebit]]></dc:creator><pubDate>Mon, 27 Jul 2015 15:06:21 GMT</pubDate></item><item><title><![CDATA[Reply to Thread in Konstonstruktor starten on Mon, 27 Jul 2015 15:22:56 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie kann ich das realisieren, dass der Thread einfach die ganze Zeit läuft solange die Instanz der Klasse existiert?</p>
</blockquote>
<p>Indem du den Thread entsprechend initialisierst und im Destruktor die <code>join</code> -Memberfunktion aufrufst?.</p>
<pre><code>struct A {
    std::thread t;

    A() : t([] {std::cout &lt;&lt; &quot;Moin&quot;;}) {}

    ~A() {t.join();}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2461173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2461173</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 27 Jul 2015 15:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to Thread in Konstonstruktor starten on Mon, 27 Jul 2015 15:31:46 GMT]]></title><description><![CDATA[<p>Die Lösung ist richtig, aber kann auch sehr gefährlich werden, da join eine Exception werfen kann.</p>
<p><a href="http://www.cplusplus.com/reference/thread/thread/join/" rel="nofollow">http://www.cplusplus.com/reference/thread/thread/join/</a><br />
<a href="http://www.codingstandard.com/rule/15-2-1-do-not-throw-an-exception-from-a-destructor/" rel="nofollow">http://www.codingstandard.com/rule/15-2-1-do-not-throw-an-exception-from-a-destructor/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2461175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2461175</guid><dc:creator><![CDATA[Onkki]]></dc:creator><pubDate>Mon, 27 Jul 2015 15:31:46 GMT</pubDate></item><item><title><![CDATA[Reply to Thread in Konstonstruktor starten on Mon, 27 Jul 2015 15:42:35 GMT]]></title><description><![CDATA[<p>Onkki schrieb:</p>
<blockquote>
<p>Die Lösung ist richtig, aber kann auch sehr gefährlich werden, da join eine Exception werfen kann.</p>
<p><a href="http://www.cplusplus.com/reference/thread/thread/join/" rel="nofollow">http://www.cplusplus.com/reference/thread/thread/join/</a><br />
<a href="http://www.codingstandard.com/rule/15-2-1-do-not-throw-an-exception-from-a-destructor/" rel="nofollow">http://www.codingstandard.com/rule/15-2-1-do-not-throw-an-exception-from-a-destructor/</a></p>
</blockquote>
<p>Auch std::threads ohne wrapper zu benutzen ist gefährlich da der Konstruktor in 32 Bit Systemen auch eine Exception werfen könnte, wenn das System keine weiteren Threads mehr starten kann.</p>
<p>Was join angeht solltest Du im Destruktor auf auf joinable testen und ihn erst dann joinen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2461176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2461176</guid><dc:creator><![CDATA[Ruvi]]></dc:creator><pubDate>Mon, 27 Jul 2015 15:42:35 GMT</pubDate></item><item><title><![CDATA[Reply to Thread in Konstonstruktor starten on Mon, 27 Jul 2015 15:47:36 GMT]]></title><description><![CDATA[<p>Ruvi schrieb:</p>
<blockquote>
<p>Auch std::threads ohne wrapper zu benutzen ist gefährlich da der Konstruktor in 32 Bit Systemen auch eine Exception werfen könnte, wenn das System keine weiteren Threads mehr starten kann.</p>
</blockquote>
<p>Solange es nicht im Destruktor passiert wäre es aber auch kein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2461177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2461177</guid><dc:creator><![CDATA[Onkki]]></dc:creator><pubDate>Mon, 27 Jul 2015 15:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to Thread in Konstonstruktor starten on Mon, 27 Jul 2015 16:25:03 GMT]]></title><description><![CDATA[<p>Ruvi schrieb:</p>
<blockquote>
<p>Onkki schrieb:</p>
<blockquote>
<p>Die Lösung ist richtig, aber kann auch sehr gefährlich werden, da join eine Exception werfen kann.</p>
<p><a href="http://www.cplusplus.com/reference/thread/thread/join/" rel="nofollow">http://www.cplusplus.com/reference/thread/thread/join/</a><br />
<a href="http://www.codingstandard.com/rule/15-2-1-do-not-throw-an-exception-from-a-destructor/" rel="nofollow">http://www.codingstandard.com/rule/15-2-1-do-not-throw-an-exception-from-a-destructor/</a></p>
</blockquote>
<p>Auch std::threads ohne wrapper zu benutzen ist gefährlich da der Konstruktor in 32 Bit Systemen auch eine Exception werfen könnte, wenn das System keine weiteren Threads mehr starten kann.</p>
<p>Was join angeht solltest Du im Destruktor auf auf joinable testen und ihn erst dann joinen.</p>
</blockquote>
<p>Und nicht den Wrapper für den Wrapper vergessen!</p>
<p>Execptions kann man auch im Code abfangen, dafür braucht es kein Wrapper Object, insbesondere kann man es damit nicht mal besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2461192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2461192</guid><dc:creator><![CDATA[Bengo]]></dc:creator><pubDate>Mon, 27 Jul 2015 16:25:03 GMT</pubDate></item><item><title><![CDATA[Reply to Thread in Konstonstruktor starten on Mon, 27 Jul 2015 17:07:25 GMT]]></title><description><![CDATA[<p>Bengo schrieb:</p>
<blockquote>
<p>Und nicht den Wrapper für den Wrapper vergessen!</p>
<p>Execptions kann man auch im Code abfangen, dafür braucht es kein Wrapper Object, insbesondere kann man es damit nicht mal besser.</p>
</blockquote>
<p>Jo, jedes mal beim Starten eines Threads einen try, catch bauen und auch noch jedes mal im scope des Thread startens detach oder join mit Sicherheitstest machen ist natuerlich viel sinnvoller als einen generischen Thread wrapper. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> Warum auch 10 Zeilen code schreiben wenn man stattdessen 300 schreiben kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2461196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2461196</guid><dc:creator><![CDATA[Ruvi]]></dc:creator><pubDate>Mon, 27 Jul 2015 17:07:25 GMT</pubDate></item><item><title><![CDATA[Reply to Thread in Konstonstruktor starten on Mon, 27 Jul 2015 17:06:39 GMT]]></title><description><![CDATA[<p>wenn dein wrapper einen Fehler entedeckt muss er ihn behandeln, und das kann er im allgeinen nicht, in der Ebene dieses Wrappers und der Fehler muss nach außen. Also bringt er im Prinzip nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2461198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2461198</guid><dc:creator><![CDATA[Bengo]]></dc:creator><pubDate>Mon, 27 Jul 2015 17:06:39 GMT</pubDate></item><item><title><![CDATA[Reply to Thread in Konstonstruktor starten on Mon, 27 Jul 2015 17:17:25 GMT]]></title><description><![CDATA[<p>Bengo schrieb:</p>
<blockquote>
<p>wenn dein wrapper einen Fehler entedeckt muss er ihn behandeln, und das kann er im allgeinen nicht, in der Ebene dieses Wrappers und der Fehler muss nach außen. Also bringt er im Prinzip nichts.</p>
</blockquote>
<p>Ich koennte wenn der std::thread Konstruktor eine exception wirft statt einem expliten neuen Thread dann einen std::async job starten der dann im current Thread ablaeuft oder eine explizite Exception aus dem Konsturktor des wrappers werfen fuer einen try catch der viel weiter oben sitzt, denn wenn das System out of threads gegangen ist hat man wahrscheinlich noch ganz andere Probleme.</p>
<p>Ich bleib dabei die std::threads sind wie sie im Moment designed sind nicht dazu da ohne Wrapper benutzt zu werden.</p>
<p>Das ist auch die empfohlene Herangehensweis die der Autor der Boost::Threads (Anthony Williams) empfiehlt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2461200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2461200</guid><dc:creator><![CDATA[Ruvi]]></dc:creator><pubDate>Mon, 27 Jul 2015 17:17:25 GMT</pubDate></item><item><title><![CDATA[Reply to Thread in Konstonstruktor starten on Mon, 27 Jul 2015 17:20:43 GMT]]></title><description><![CDATA[<p>Ich gehöre nun mal nicht zu den Leuten, die für alles einen Wrapper brauchen. Ich benutze meine integers auch lieber pur, und bei der std::thread finde ich es eigentlich abstract genug. Und ich bin mir nicht so sicher, ob ich dem wrapper bei fehlgeschlagenen thread irgenteine andere Lösung machen lassen möchte und das nicht lieber in der Ebene höher behandeln möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2461204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2461204</guid><dc:creator><![CDATA[Bengo]]></dc:creator><pubDate>Mon, 27 Jul 2015 17:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to Thread in Konstonstruktor starten on Mon, 27 Jul 2015 17:25:22 GMT]]></title><description><![CDATA[<p>Bengo schrieb:</p>
<blockquote>
<p>Ich gehöre nun mal nicht zu den Leuten, die für alles einen Wrapper brauchen. Ich benutze meine integers auch lieber pur, und bei der std::thread finde ich es eigentlich abstract genug. Und ich bin mir nicht so sicher, ob ich dem wrapper bei fehlgeschlagenen thread irgenteine andere Lösung machen lassen möchte und das nicht lieber in der Ebene höher behandeln möchte.</p>
</blockquote>
<p>Naja wir brauchen uns darueber jetzt nicht weiter darueber unterhalten aber einen wrapper fuer einen std::thread auf die selbe Stufe zu stellen wie einen wrapper fuer ein int finde ich schon ziemlich frech. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2461205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2461205</guid><dc:creator><![CDATA[Ruvi]]></dc:creator><pubDate>Mon, 27 Jul 2015 17:25:22 GMT</pubDate></item></channel></rss>