<?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[Problem mit boost::thread in Klassen]]></title><description><![CDATA[<p>Guten Abend allerseits,</p>
<p>habe oben genanntes Problem und hoffe hier etwas starthilfe zu bekommen.</p>
<p>Folgender Beispielcode einer Webseite funktioniert einwandfrei zu kompilieren:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;  
 #include &lt;boost/thread.hpp&gt;  
 #include &lt;boost/date_time.hpp&gt;  

 void workerFunc()  
 {  
     boost::posix_time::seconds workTime(3);  

     std::cout &lt;&lt; &quot;Worker: running&quot; &lt;&lt; std::endl;  

     for ( int i = 0 ; i &lt; 20 ; i++ )
     {
         std::cout &lt;&lt; &quot;Number : &quot; &lt;&lt; i &lt;&lt; std::endl;
     }
     boost::this_thread::sleep(workTime);  

     std::cout &lt;&lt; &quot;Worker: finished&quot; &lt;&lt; std::endl;  
 }  

 int main(int argc, char* argv[])  
 {  
     std::cout &lt;&lt; &quot;main: startup&quot; &lt;&lt; std::endl;  

     boost::thread workerThread(workerFunc);  

     std::cout &lt;&lt; &quot;main: waiting for thread&quot; &lt;&lt; std::endl;  

     workerThread.join();  

     std::cout &lt;&lt; &quot;main: done&quot; &lt;&lt; std::endl;  

     return 0;  
 }
</code></pre>
<p>Wenn ich das ganze jedoch in eine Klasse packe, bekomm ich eine Fehlermeldung.<br />
Hier mal der Codeausschnitt:</p>
<pre><code class="language-cpp">void Server::worker()
{
    std::cout &lt;&lt; &quot;Worker : start&quot; &lt;&lt; std::endl;
    for ( int i = 0 ; i &lt; 20 ; i++ )
    {
        std::cout &lt;&lt; &quot;Number : &quot; &lt;&lt; i &lt;&lt; std::endl;
    }
    std::cout &lt;&lt; &quot;Worker : end&quot; &lt;&lt; std::endl;
}

void Server::start()
{
    std::cout &lt;&lt; &quot;Main : Starting thread..&quot; &lt;&lt; std::endl;
    threading = new boost::thread(worker);
}
</code></pre>
<p>und dann kommt folgende Fehlermeldung:</p>
<pre><code class="language-cpp">error: invalid static_cast from type ‘&lt;unresolved overloaded function type&gt;’ to type ‘void*’
</code></pre>
<p>Wieso funktioniert es, wenn es nicht in einer klasse ist?</p>
<p>Besten Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270441/problem-mit-boost-thread-in-klassen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 06:54:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270441.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Jul 2010 17:07:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit boost::thread in Klassen on Mon, 12 Jul 2010 17:07:48 GMT]]></title><description><![CDATA[<p>Guten Abend allerseits,</p>
<p>habe oben genanntes Problem und hoffe hier etwas starthilfe zu bekommen.</p>
<p>Folgender Beispielcode einer Webseite funktioniert einwandfrei zu kompilieren:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;  
 #include &lt;boost/thread.hpp&gt;  
 #include &lt;boost/date_time.hpp&gt;  

 void workerFunc()  
 {  
     boost::posix_time::seconds workTime(3);  

     std::cout &lt;&lt; &quot;Worker: running&quot; &lt;&lt; std::endl;  

     for ( int i = 0 ; i &lt; 20 ; i++ )
     {
         std::cout &lt;&lt; &quot;Number : &quot; &lt;&lt; i &lt;&lt; std::endl;
     }
     boost::this_thread::sleep(workTime);  

     std::cout &lt;&lt; &quot;Worker: finished&quot; &lt;&lt; std::endl;  
 }  

 int main(int argc, char* argv[])  
 {  
     std::cout &lt;&lt; &quot;main: startup&quot; &lt;&lt; std::endl;  

     boost::thread workerThread(workerFunc);  

     std::cout &lt;&lt; &quot;main: waiting for thread&quot; &lt;&lt; std::endl;  

     workerThread.join();  

     std::cout &lt;&lt; &quot;main: done&quot; &lt;&lt; std::endl;  

     return 0;  
 }
</code></pre>
<p>Wenn ich das ganze jedoch in eine Klasse packe, bekomm ich eine Fehlermeldung.<br />
Hier mal der Codeausschnitt:</p>
<pre><code class="language-cpp">void Server::worker()
{
    std::cout &lt;&lt; &quot;Worker : start&quot; &lt;&lt; std::endl;
    for ( int i = 0 ; i &lt; 20 ; i++ )
    {
        std::cout &lt;&lt; &quot;Number : &quot; &lt;&lt; i &lt;&lt; std::endl;
    }
    std::cout &lt;&lt; &quot;Worker : end&quot; &lt;&lt; std::endl;
}

void Server::start()
{
    std::cout &lt;&lt; &quot;Main : Starting thread..&quot; &lt;&lt; std::endl;
    threading = new boost::thread(worker);
}
</code></pre>
<p>und dann kommt folgende Fehlermeldung:</p>
<pre><code class="language-cpp">error: invalid static_cast from type ‘&lt;unresolved overloaded function type&gt;’ to type ‘void*’
</code></pre>
<p>Wieso funktioniert es, wenn es nicht in einer klasse ist?</p>
<p>Besten Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925163</guid><dc:creator><![CDATA[Mr. Thread]]></dc:creator><pubDate>Mon, 12 Jul 2010 17:07:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit boost::thread in Klassen on Mon, 12 Jul 2010 17:10:41 GMT]]></title><description><![CDATA[<p>Du suchst <a href="http://www.boost.org/doc/libs/1_43_0/libs/bind/bind.html" rel="nofollow">boost::bind</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925167</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 12 Jul 2010 17:10:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit boost::thread in Klassen on Mon, 12 Jul 2010 17:21:47 GMT]]></title><description><![CDATA[<p>Mr. Thread schrieb:</p>
<blockquote>
<p>Wieso funktioniert es, wenn es nicht in einer klasse ist?</p>
</blockquote>
<p>wie drakon schon sagt: du sucht boost::bind</p>
<p>ungetestet:</p>
<pre><code class="language-cpp">boost::thread(boost::bind(&amp;MyServer::worker,this));
</code></pre>
<p>Zu der Frage, warum es nicht läuft:<br />
Im ersten Fall hast du eine (einfache) Funktion, im zweiten eine Member-Funktion.</p>
<p>boost::bind ist quasi ein Objekt mit einem operator()(), // dieser wird bei starten des Threads aufgerufen<br />
und wrapped inden Funktionsaufruf quasi in einen Funktionsaufruf auf dein Objekt,<br />
wobei die angegebene Funktion aufgerufen wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925172</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Jul 2010 17:21:47 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit boost::thread in Klassen on Mon, 12 Jul 2010 17:58:55 GMT]]></title><description><![CDATA[<p>also ich hatte auch mal so ein ähnliches Problem, aber als ich nachgesehen habe lag es nur an der alten Version...</p>
<p>Funktionszeiger gibt's im Thread-Construktor erst seit Version &gt;1.35.<br />
Müssten dann nicht alle Funktionszeiger als Callable durchgehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925194</guid><dc:creator><![CDATA[*lt**Exit*gt*]]></dc:creator><pubDate>Mon, 12 Jul 2010 17:58:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit boost::thread in Klassen on Mon, 12 Jul 2010 18:16:44 GMT]]></title><description><![CDATA[<p>&lt;/Exit&gt; schrieb:</p>
<blockquote>
<p>also ich hatte auch mal so ein ähnliches Problem, aber als ich nachgesehen habe lag es nur an der alten Version...</p>
<p>Funktionszeiger gibt's im Thread-Construktor erst seit Version &gt;1.35.<br />
Müssten dann nicht alle Funktionszeiger als Callable durchgehen?</p>
</blockquote>
<p>Nur eine Vermutung:<br />
Wenn dein Objekt, auf das dein Zeiger zeigt eine</p>
<pre><code class="language-cpp">void operator()();
</code></pre>
<p>Funktion hat evtl.?</p>
<p>Welche Funktion soll er denn Aufrufen?<br />
Ich vermute mal, es ist die einzige, die in Frage kommt...</p>
<p>EDIT: Dann müßtest du als Parameter aber das Objekt übergeben<br />
EDIT2: Ich meine natürlich: Auf welchem Objekt soll er die Funktion ausführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925204</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Jul 2010 18:16:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit boost::thread in Klassen on Mon, 12 Jul 2010 19:33:50 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>Mr. Thread schrieb:</p>
<blockquote>
<p>Wieso funktioniert es, wenn es nicht in einer klasse ist?</p>
</blockquote>
<p>wie drakon schon sagt: du sucht boost::bind</p>
<p>ungetestet:</p>
<pre><code class="language-cpp">boost::thread(boost::bind(&amp;MyServer::worker,this));
</code></pre>
<p>Zu der Frage, warum es nicht läuft:<br />
Im ersten Fall hast du eine (einfache) Funktion, im zweiten eine Member-Funktion.</p>
<p>boost::bind ist quasi ein Objekt mit einem operator()(), // dieser wird bei starten des Threads aufgerufen<br />
und wrapped inden Funktionsaufruf quasi in einen Funktionsaufruf auf dein Objekt,<br />
wobei die angegebene Funktion aufgerufen wird</p>
</blockquote>
<p>Danke, daran hats gelegtn <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="🙂"
    /><br />
Das Objekt hat keine Funktion mit nem operator()().</p>
<p>Besten Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925255</guid><dc:creator><![CDATA[Mr. Thread]]></dc:creator><pubDate>Mon, 12 Jul 2010 19:33:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit boost::thread in Klassen on Tue, 13 Jul 2010 06:33:08 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich meine natürlich: Auf welchem Objekt soll er die Funktion ausführen.</p>
</blockquote>
<p>Das stimmt allerdings... Man müsste das Objekt angeben.<br />
Ok, dann geht's doch nicht. Thx <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1925345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925345</guid><dc:creator><![CDATA[*lt**Exit*gt*]]></dc:creator><pubDate>Tue, 13 Jul 2010 06:33:08 GMT</pubDate></item></channel></rss>