Merkwürdiges Problem beim erstellen eines Threads
-
Hi,
ich baue grade eine Anwendung, die komplett auf Klassenaufbaut. Und in einer Klasse soll halt ein Thread erstellt werden. Doch bekomme ich dort eine Fehlermeldung bzgl Convertierung: Hier die Meldung:/development/lrms/src/cclient.cpp: In member function
void CClient::AddClient()': /development/lrms/src/cclient.cpp:12: error: ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say
&CClient::Handle'
/development/lrms/src/cclient.cpp:12: error: cannot convertvoid*(CClient::*)(void*)' to \
void*()(void)' for argument `3' toint pthread\_create(pthread\_t*, const pthread\_attr\_t*, void*(*)(void*), void*)' gmake[2]: *** [cclient.o] Error 1 gmake[2]: Target
all' not remade because of errors.
gmake[1]: *** [all-recursive] Error 1
gmake: *** [all] Error 2Die Meldung kommt aus KDevelop!
Hier die cclient.h
#ifndef CCLIENT_H #define CCLIENT_H #include <pthread.h> #include "csocket.h" #include "clog.h" class CClient{ public: CClient(CSocket *_s,CLog *_log,int _sender); void AddClient(); void *Handle(void *data); ~CClient(); private: int sender; CSocket *s; CLog *log; pthread_t th; }; #endif
und hier die cclient.cpp
#include "cclient.h" CClient::CClient(CSocket *_s,CLog *_log,int _sender) { s = _s; sender = _sender; log = _log; } void CClient::AddClient() { if(pthread_create(&th,NULL,&Handle,NULL) != 0) { log->Print("Fehler beim erstellen des Threads\n"); } } void *CClient::Handle(void *data) { log->Print("Thread gestartet\n"); } CClient::~CClient() { }
Fehlermeldung wie gesagt in der pthread_create.
Hoffe ihr könnt mir dabei helfen, was ich falsch mache.
Schönen Abend noch.
-
-
Hi,
danke schön. Wichtig ist nur, das auch die pthread per -lpthread eingebunden wird.
-
Wichtig ist vor allem, daß du keine nicht-statische Methode ohne konkrete Klasseninstanz verwenden kannst.
-
hier wäre ein komplettes beispiel: http://www.c-plusplus.net/forum/viewtopic-var-p-is-911927.html#911927
Zitat Ponto:
Die Startfunktion eines Threads darf nicht eine static Funktion innerhalb einer Klasse sein, sondern muss eine freistehende Funktion mit C Bindung sein, auch wenn ersteres meistens klappt.
übrigens danke nochmal