PThread und Class
-
Danke für deine schnelle Antwort.
Habe es jetzt mal abgeändert und bekomme jetzt folgende Meldung:
../src/threadtest.cpp:23:54: Fehler: »void (test::ThreadTest::)(void)« kann nicht nach »void* ()(void)« für Argument »3« nach »int pthread_create(pthread_t*, const pthread_attr_t*, void* ()(void), void*)« umgewandelt werden
make: *** [src/threadtest.o] Fehler 1void ThreadTest::start() { pthread_create(&thread, NULL, &ThreadTest::run, this); } void ThreadTest::run(void* runID) { std::cout << "test" << std::endl; return; }So sollte es eigentlich funktionieren laut deiner Anleitung. Was ist noch falsch?
-
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.
-
Hi,
habe es jetzt getestet. Es funktioniert leider noch nicht.
Bekomme immer folgende Meldung:undefined reference to `test::Thread::someFunktion()'
someFunktion habe ich aber deklariert.
void Thread::start(){ pthread_create(&thread,NULL,&Thread::run,this); } void *Thread::run(void *t) { static_cast<Thread*>(t)->run(); return 0; } void someFunktion(){ cout << "test"; }was ist noch falsch daran?
-
Du hast das Thread:: bei der Definition vergessen

-
oh danke für die schnelle Antwort.Dummer Anfängerfehler.
-
Hallo zusammen,
funktioniert leider immer noch nicht.
Mein Code sieht jetzt wie folgt aus:
#include <pthread.h> #include "threadtest.h" int main() { ::test::ThreadTest test; test.start(); return 0; }/* * 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_ *//* * threadtest.cpp */ #include <pthread.h> #include <iostream> #include "threadtest.h" namespace test { ThreadTest::ThreadTest() { // TODO Auto-generated constructor stub } ThreadTest::~ThreadTest() { // TODO Auto-generated destructor stub } void ThreadTest::start() { pthread_create(&thread, NULL, &ThreadTest::run, this); } void *ThreadTest::run(void* runID) { std::cout << "test" << std::endl; return 0; } } /* namespace test */Ich bekomme zwar kein Fehler mehr beim Compilieren, aber nach dem Start erscheint auch die Ausgabe test nicht. Hoffe ihr könnt mir weiterhelfen.
-
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.
-
Spricht etwas gegen C++0x und std::thread?
Denn dann kann man auch sehr einfach Memberfunktionen über einen Thread starten.
-
Hallo Eth0n,
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?
-
Gerade Eclipse ist (zumindest bei mir unter Mac OS) die beste IDE für C++0x. Auf Linux hab ich sie noch nicht ausprobiert.