Thread programmierung mit Member zugriff ?
-
Das ganze ist ja nicht auf meinem Mist gewachsen,das ist aus einer Newsgroup,
und da lief es.
-
Das soll aber schon c++ sein, oder?
-
Ja soll C++ sein.
Würde euch nicht nerven,wenn ich nicht seit ein paar Stunden suche.
Ich möchte eine Memberfunktion in einem Thread aufrufen.Danke
-
Also, wenns C++ sein soll und du nicht mal ne Memberfunktion aufrufen kannst, dann lern die Grundlagen.
-
Das hat mit Grundlagen nichts zu tun,weil Memberfunktion im pthread doch schon
etwas kompliziertes für mich ist.Nichts für ungut.
-
Die Funktion, die an pthread_create übergeben wird, muss C linkage haben. So ein Programm könnte laufen:
extern "C" { #include <pthread.h> } class Thread { public: virtual ~Thread(); void start(); void finish(); virtual void * run() = 0; private: pthread_t m_thread; }; namespace { extern "C" void * thread_entry_function(void * arg) { Thread * thread = static_cast<Thread *>(arg); return thread->run(); } } Thread::~Thread() { } void Thread::start() { pthread_create(&m_thread, NULL, thread_entry_function, this); } void Thread::finish() { pthread_join(m_thread, NULL); } class MeinThread : public Thread { virtual void * run() { //Hier eigener Code rein. return NULL; } }; int main() { MeinThread mt; mt.start(); mt.finish(); }
-
@Ponto
Ich war ein paar Tage nicht zu Hause.
Danke für den Code !
-
akari schrieb:
Hallo
CMeinThread ist eine Klasse, du brauchst aber eine Instanz der Klasse um die Methode aufrufen zu können. Du solltest erstmal die Grundlagen der OOP beherschen, bevor du mit Threads rumspielst.
bis bald
akariIMHO ist CMainThread eine Instanz von CThread:
//MeinKlasse// CThread CMeinThread;Aber der Link schadet dennoch nicht

-
Einer Instanz kann man aber keine Methoden überschreiben:
CMeinThread::run() { //Eigener Code als Thread return NULL; }
-
Ja, deswegen schadet der Link ja nich
