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 convert void*(CClient::*)(void*)' to \void*()(void)' for argument `3' to int pthread\_create(pthread\_t*, const pthread\_attr\_t*, void*(*)(void*), void*)' gmake[2]: *** [cclient.o] Error 1 gmake[2]: Targetall' not remade because of errors.
    gmake[1]: *** [all-recursive] Error 1
    gmake: *** [all] Error 2

    Die 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


Anmelden zum Antworten