<?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[PThread und Class]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe ein Problem mit PThread und Classen. Habe folgenden Testcode:</p>
<pre><code class="language-cpp">/*
 * threadtest.cpp
*/
#include &lt;pthread.h&gt;
#include &lt;iostream&gt;
#include &quot;threadtest.h&quot;

namespace test {

ThreadTest::ThreadTest() {
	// TODO Auto-generated constructor stub

}

ThreadTest::~ThreadTest() {
	// TODO Auto-generated destructor stub
}

void ThreadTest::start(long *id) {
	pthread_t thread;
	pthread_create(&amp;thread, NULL, run, (void *) id);
}

void *ThreadTest::run(void *runID) {
	std::cout &lt;&lt; runID &lt;&lt; std::endl;
	pthread_exit(NULL);
	return NULL;
}

} /* namespace test */
</code></pre>
<pre><code class="language-cpp">/*
 * threadtest.h
 */

#ifndef THREADTEST_H_
#define THREADTEST_H_

namespace test {

class ThreadTest {
public:
	ThreadTest();
	virtual ~ThreadTest();
	void start(long *id);
	void *run(void *runID);
};

} /* namespace test */
#endif /* THREADTEST_H_ */
</code></pre>
<p>Beim compilieren bekomme ich folgende Fehlermeldung:</p>
<blockquote>
<p>../src/threadtest.cpp:24:48: Fehler: Argument des Typs »void* (test::ThreadTest::)(void*)« passt nicht zu »void* (<em>)(void</em>)«<br />
make: *** [src/threadtest.o] Fehler 1</p>
</blockquote>
<p>Vielleicht kann mir jemand von euch sagen wo mein Fehler liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294378/pthread-und-class</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 20:42:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294378.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Oct 2011 11:40:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to PThread und Class on Mon, 24 Oct 2011 11:40:02 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe ein Problem mit PThread und Classen. Habe folgenden Testcode:</p>
<pre><code class="language-cpp">/*
 * threadtest.cpp
*/
#include &lt;pthread.h&gt;
#include &lt;iostream&gt;
#include &quot;threadtest.h&quot;

namespace test {

ThreadTest::ThreadTest() {
	// TODO Auto-generated constructor stub

}

ThreadTest::~ThreadTest() {
	// TODO Auto-generated destructor stub
}

void ThreadTest::start(long *id) {
	pthread_t thread;
	pthread_create(&amp;thread, NULL, run, (void *) id);
}

void *ThreadTest::run(void *runID) {
	std::cout &lt;&lt; runID &lt;&lt; std::endl;
	pthread_exit(NULL);
	return NULL;
}

} /* namespace test */
</code></pre>
<pre><code class="language-cpp">/*
 * threadtest.h
 */

#ifndef THREADTEST_H_
#define THREADTEST_H_

namespace test {

class ThreadTest {
public:
	ThreadTest();
	virtual ~ThreadTest();
	void start(long *id);
	void *run(void *runID);
};

} /* namespace test */
#endif /* THREADTEST_H_ */
</code></pre>
<p>Beim compilieren bekomme ich folgende Fehlermeldung:</p>
<blockquote>
<p>../src/threadtest.cpp:24:48: Fehler: Argument des Typs »void* (test::ThreadTest::)(void*)« passt nicht zu »void* (<em>)(void</em>)«<br />
make: *** [src/threadtest.o] Fehler 1</p>
</blockquote>
<p>Vielleicht kann mir jemand von euch sagen wo mein Fehler liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135059</guid><dc:creator><![CDATA[mrno]]></dc:creator><pubDate>Mon, 24 Oct 2011 11:40:02 GMT</pubDate></item><item><title><![CDATA[Reply to PThread und Class on Mon, 24 Oct 2011 12:07:00 GMT]]></title><description><![CDATA[<p>Du kannst keine Memberfunktion als Start-Routine übergeben. Benutze dafür eine statische Funktion, in etwa so:</p>
<pre><code class="language-cpp">void Thread::start()
{
    // pthread_t thread_handle; sollte ein Member sein, du brauchst das Handle noch für andere Dinge
    pthread_create(&amp;thread_handle, 0, &amp;Thread::run, this); // Wir übergeben this als Argument
}

void Thread::run(void* t) // Diese Funktion muss static sein
{
    static_cast&lt;Thread*&gt;(t)-&gt;some_func(); // Nun die Funktion des this-Objekts aufrufen
    return 0;
}
</code></pre>
<p>Den Sinn der Start-ID habe ich jetzt nicht verstanden. Außerdem würde ich das, was die Funktion Start macht, im Konstruktor erledigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135071</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 24 Oct 2011 12:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to PThread und Class on Mon, 24 Oct 2011 12:14:50 GMT]]></title><description><![CDATA[<p>Danke für deine schnelle Antwort.</p>
<p>Habe es jetzt mal abgeändert und bekomme jetzt folgende Meldung:</p>
<p>../src/threadtest.cpp:23:54: Fehler: »void (test::ThreadTest::<em>)(void</em>)« kann nicht nach »void* (<em>)(void</em>)« für Argument »3« nach »int pthread_create(pthread_t*, const pthread_attr_t*, void* (<em>)(void</em>), void*)« umgewandelt werden<br />
make: *** [src/threadtest.o] Fehler 1</p>
<pre><code class="language-cpp">void ThreadTest::start() {
	pthread_create(&amp;thread, NULL, &amp;ThreadTest::run, this);
}

void ThreadTest::run(void* runID) {
	std::cout &lt;&lt; &quot;test&quot; &lt;&lt; std::endl;
    return;
}
</code></pre>
<p>So sollte es eigentlich funktionieren laut deiner Anleitung. Was ist noch falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135074</guid><dc:creator><![CDATA[mrno]]></dc:creator><pubDate>Mon, 24 Oct 2011 12:14:50 GMT</pubDate></item><item><title><![CDATA[Reply to PThread und Class on Mon, 24 Oct 2011 12:17:00 GMT]]></title><description><![CDATA[<p>Du hast die Funktion nicht static gemacht. Ich habe übrigens den Stern beim Rückgabetyp von run vergessen, die gibt natürlich void* zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135075</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 24 Oct 2011 12:17:00 GMT</pubDate></item><item><title><![CDATA[Reply to PThread und Class on Tue, 25 Oct 2011 08:55:34 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>habe es jetzt getestet. Es funktioniert leider noch nicht.<br />
Bekomme immer folgende Meldung:</p>
<p>undefined reference to `test::Thread::someFunktion()'</p>
<p>someFunktion habe ich aber deklariert.</p>
<pre><code class="language-cpp">void Thread::start(){
	pthread_create(&amp;thread,NULL,&amp;Thread::run,this);
}

void *Thread::run(void *t) {
	static_cast&lt;Thread*&gt;(t)-&gt;run();
	return 0;
}

void someFunktion(){
 cout &lt;&lt; &quot;test&quot;;
}
</code></pre>
<p>was ist noch falsch daran?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135453</guid><dc:creator><![CDATA[mrno]]></dc:creator><pubDate>Tue, 25 Oct 2011 08:55:34 GMT</pubDate></item><item><title><![CDATA[Reply to PThread und Class on Tue, 25 Oct 2011 09:00:18 GMT]]></title><description><![CDATA[<p>Du hast das Thread:: bei der Definition vergessen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135455</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 25 Oct 2011 09:00:18 GMT</pubDate></item><item><title><![CDATA[Reply to PThread und Class on Tue, 25 Oct 2011 09:46:09 GMT]]></title><description><![CDATA[<p>oh danke für die schnelle Antwort.Dummer Anfängerfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135467</guid><dc:creator><![CDATA[mrno]]></dc:creator><pubDate>Tue, 25 Oct 2011 09:46:09 GMT</pubDate></item><item><title><![CDATA[Reply to PThread und Class on Wed, 26 Oct 2011 09:15:00 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>funktioniert leider immer noch nicht.</p>
<p>Mein Code sieht jetzt wie folgt aus:</p>
<pre><code class="language-cpp">#include &lt;pthread.h&gt;
#include &quot;threadtest.h&quot;

int main() {
	::test::ThreadTest test;
	test.start();
	return 0;
}
</code></pre>
<pre><code class="language-cpp">/*
 * threadtest.h
 */

#ifndef THREADTEST_H_
#define THREADTEST_H_

namespace test {

class ThreadTest {
public:
	pthread_t thread;
	ThreadTest();
	virtual ~ThreadTest();
	void start();
	static void *run(void *runID);
};

} /* namespace test */
#endif /* THREADTEST_H_ */
</code></pre>
<pre><code class="language-cpp">/*
 * threadtest.cpp
 */
#include &lt;pthread.h&gt;
#include &lt;iostream&gt;
#include &quot;threadtest.h&quot;

namespace test {

ThreadTest::ThreadTest() {
	// TODO Auto-generated constructor stub

}

ThreadTest::~ThreadTest() {
	// TODO Auto-generated destructor stub
}

void ThreadTest::start() {
	pthread_create(&amp;thread, NULL, &amp;ThreadTest::run, this);
}

void *ThreadTest::run(void* runID) {
	std::cout &lt;&lt; &quot;test&quot; &lt;&lt; std::endl;
    return 0;
}

} /* namespace test */
</code></pre>
<p>Ich bekomme zwar kein Fehler mehr beim Compilieren, aber nach dem Start erscheint auch die Ausgabe test nicht. Hoffe ihr könnt mir weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135959</guid><dc:creator><![CDATA[mrno]]></dc:creator><pubDate>Wed, 26 Oct 2011 09:15:00 GMT</pubDate></item><item><title><![CDATA[Reply to PThread und Class on Wed, 26 Oct 2011 11:35:33 GMT]]></title><description><![CDATA[<p>Vermutlich liegt es daran, dass deine Runtime den Prozess beendet, wenn der Mainthread beendet wird. Die Lösung ist, im Mainthread auf den neuen Thread zu warten, das geht mit pthread_join.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136045</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 26 Oct 2011 11:35:33 GMT</pubDate></item><item><title><![CDATA[Reply to PThread und Class on Wed, 26 Oct 2011 11:42:53 GMT]]></title><description><![CDATA[<p>Spricht etwas gegen C++0x und std::thread?<br />
Denn dann kann man auch sehr einfach Memberfunktionen über einen Thread starten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136048</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Wed, 26 Oct 2011 11:42:53 GMT</pubDate></item><item><title><![CDATA[Reply to PThread und Class on Wed, 26 Oct 2011 16:16:30 GMT]]></title><description><![CDATA[<p>Hallo Eth0n,</p>
<p>was ist der Vorteil c++0x zu verwenden. Bin ganz neu im Thema c++, habe bis jetzt nur java Programmiert. Bis jetzt konnte ich c++0x Code noch nicht in eclipse cdt for linux nutzen. Eine Codecompleten funktioniert nicht und das Compilieren mach auch noch Probleme. Was für ein Editor ist für c++0x geeignet (Ubuntu user). Gibt es da andere Source files?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136233</guid><dc:creator><![CDATA[mrno]]></dc:creator><pubDate>Wed, 26 Oct 2011 16:16:30 GMT</pubDate></item><item><title><![CDATA[Reply to PThread und Class on Wed, 26 Oct 2011 16:17:19 GMT]]></title><description><![CDATA[<p>Gerade Eclipse ist (zumindest bei mir unter Mac OS) die beste IDE für C++0x. Auf Linux hab ich sie noch nicht ausprobiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136234</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 26 Oct 2011 16:17:19 GMT</pubDate></item></channel></rss>