<?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[Threads die nicht static attribute bzw methoden verwenden]]></title><description><![CDATA[<p>Ich stehe vor folgendem Problem:</p>
<p>Ich habe Klasse a die gewisse methoden mitbringen. Mit dieser Klasse a sollen nun aber mehrere Objekte erzeugt werden die gleichzeitig Arbeiten können. Lösung -&gt; Threads. Einzige Problem ist, Threads verlangen statische Elemente, sowohl die Methode als auch die Attribute mit denen sie arbeiten sollen. Das Problem ist halt nur, ich kann die Sachen nicht statisch machen, da jedes Objekt zwar die gleichen Attribute hat, aber andere Werte verwendet, was ein static ausschhließt.<br />
Nun bin ich über google auf die boost bibliothek gekommen, die soll angeblich bei solchen Problemen helfen können. Nur ich schaff es nicht damit mein Problem zu lösen. Es kommen immernoch die &quot;muss statische sachen verwenden&quot; Fehlermeldungen.</p>
<pre><code class="language-cpp">class Klasse
{
   int a;
   int b;

   Klasse(int,int);
   void tuhwasmitaundb();
};

int main()
{
   Klasse neu(2,3);
   boost::thread neuer_thread(neu.tuhwasmitaundb);
   Klasse neuII(4,2);
   boost::thread neuer_threadII(neuII.tuhwasmitaundb);
}
</code></pre>
<p>Natürlich stark vereifacht gibt dieser Codeschnipsel aber dennoch die Logik wieder die dem interressanten Programmabschnitt inne wohnt. Wie kann ich das Problem lösen?</p>
<p>Danke für eure Hilfsbereitschaft... :schland:</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269212/threads-die-nicht-static-attribute-bzw-methoden-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 07:57:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269212.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Jun 2010 21:42:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threads die nicht static attribute bzw methoden verwenden on Mon, 21 Jun 2010 21:42:01 GMT]]></title><description><![CDATA[<p>Ich stehe vor folgendem Problem:</p>
<p>Ich habe Klasse a die gewisse methoden mitbringen. Mit dieser Klasse a sollen nun aber mehrere Objekte erzeugt werden die gleichzeitig Arbeiten können. Lösung -&gt; Threads. Einzige Problem ist, Threads verlangen statische Elemente, sowohl die Methode als auch die Attribute mit denen sie arbeiten sollen. Das Problem ist halt nur, ich kann die Sachen nicht statisch machen, da jedes Objekt zwar die gleichen Attribute hat, aber andere Werte verwendet, was ein static ausschhließt.<br />
Nun bin ich über google auf die boost bibliothek gekommen, die soll angeblich bei solchen Problemen helfen können. Nur ich schaff es nicht damit mein Problem zu lösen. Es kommen immernoch die &quot;muss statische sachen verwenden&quot; Fehlermeldungen.</p>
<pre><code class="language-cpp">class Klasse
{
   int a;
   int b;

   Klasse(int,int);
   void tuhwasmitaundb();
};

int main()
{
   Klasse neu(2,3);
   boost::thread neuer_thread(neu.tuhwasmitaundb);
   Klasse neuII(4,2);
   boost::thread neuer_threadII(neuII.tuhwasmitaundb);
}
</code></pre>
<p>Natürlich stark vereifacht gibt dieser Codeschnipsel aber dennoch die Logik wieder die dem interressanten Programmabschnitt inne wohnt. Wie kann ich das Problem lösen?</p>
<p>Danke für eure Hilfsbereitschaft... :schland:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1915447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1915447</guid><dc:creator><![CDATA[Jud4s]]></dc:creator><pubDate>Mon, 21 Jun 2010 21:42:01 GMT</pubDate></item><item><title><![CDATA[Reply to Threads die nicht static attribute bzw methoden verwenden on Mon, 21 Jun 2010 22:20:16 GMT]]></title><description><![CDATA[<p>Nur ein kleiner Tipp: <a href="http://www.boost.org/doc/libs/1_43_0/libs/bind/bind.html" rel="nofollow">boost::bind</a>.<br />
Den Rest schaffst du alleine, oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1915461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1915461</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 21 Jun 2010 22:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Threads die nicht static attribute bzw methoden verwenden on Tue, 22 Jun 2010 07:28:56 GMT]]></title><description><![CDATA[<p>EDIT: Sorry for writing so much Käse...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1915488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1915488</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 22 Jun 2010 07:28:56 GMT</pubDate></item><item><title><![CDATA[Reply to Threads die nicht static attribute bzw methoden verwenden on Tue, 22 Jun 2010 07:08:30 GMT]]></title><description><![CDATA[<p>Jud4s schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class Klasse
{
   int a;
   int b;

   Klasse(int,int);
   void tuhwasmitaundb();
};

int main()
{
   Klasse neu(2,3);
   boost::thread neuer_thread(neu.tuhwasmitaundb);
   Klasse neuII(4,2);
   boost::thread neuer_thread(neuII.tuhwasmitaundb);
}
</code></pre>
</blockquote>
<p>Das, was bei <code>neu.tuhwasmitaundb</code> und <code>neuII.tuhwasmitaundb</code> rauskommt, kann nur mit dem Funktionsaufruf-Operator kombiniert werden.</p>
<p>Achtung: Du willst hier scheinbar die Threads und anweisen die Funtion tuhwasmitaundb auf den Objekten neu und neuII auszuführen. Das Problem hier ist folgendes:<br />
- Du startest die Threads<br />
- main wird beendet<br />
- Dabei werden die Thread-Objekte und die Klasse-Objekte zerstört<br />
- Die Threads werden von den Thread-Objekten &quot;detatcht&quot; (laufen weiter ohne Thread-Objekt)<br />
- Die Threads greifen eventuell immernoch auf a und b der Objekte zu, die es aber schon gar nicht mehr gibt.</p>
<p>Kaboom!</p>
<p>Du kannst es also zB so machen:</p>
<pre><code class="language-cpp">Klasse obj1 (2,3);
  boost::thread t1 (boost::bind(&amp;Klasse::tuhwasmitaundb,&amp;obj1));  // #1  
  ...
  t1.join(); // warten, bis thread fertig ist
</code></pre>
<p>oder so</p>
<pre><code class="language-cpp">Klasse obj1 (2,3);
  boost::thread t1 (boost::bind(&amp;Klasse::tuhwasmitaundb,obj1));  // #2
</code></pre>
<p>#1: bind liefert einen Funktor, der einen Zeiger auf obj1 speichert. obj1 muss also lang genug leben. Deswegen das join().<br />
#2: bind liefert einen Funktor, der eine Kopie des Klasse-Objekts enthält. die Funktion tuhwasmitaundb wird nicht auf obj1 aufgerufen, sondern auf einer Kopie.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1915534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1915534</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 22 Jun 2010 07:08:30 GMT</pubDate></item><item><title><![CDATA[Reply to Threads die nicht static attribute bzw methoden verwenden on Tue, 22 Jun 2010 07:13:37 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>Bei der Verwendung von boost::bind muss nämlich das Fortbestehen des Objektes<br />
garantiert sein.</p>
</blockquote>
<p>Nö, muss nicht.</p>
<pre><code>using boost::bind;
using boost::ref;
bind(&amp;Klasse::elementFunktion,obj)      // kopiert Objekt
bind(&amp;Klasse::elementFunktion,&amp;obj)     // kopiert Zeiger
bind(&amp;Klasse::elementFunktion,ref(obj)) // kopiert &quot;Referenz&quot;
</code></pre>
<p>Im ersten Fall ist es egal, was mit dem Objekt <code>obj</code> später passiert, da der Thread auf einer Kopie arbeiten wird. (Der Funktor speichert eine Kopie.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1915539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1915539</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 22 Jun 2010 07:13:37 GMT</pubDate></item></channel></rss>