pthreads Thread wird nicht gestartet



  • entweder du baus dir eine struct, die sowohl die daten als auch »this« anthält oder du speicherst die Daten in einem Member deines Objektes zwischen.



  • Hi,
    Ich speichere es nun als Member bekomme jedoch noch ein paar Fehler:
    Header:

    class client {
      private:
    //blabla
     static void helprecive(void *arg);
     static void helpsend(void *arg);
     void emfpange();
     void sending();
      public:
    /blabla
    void send2server(char buffertosend[4096]);
    void recv2server(compile func);
    };
    

    cpp:

    void network::client::send2server(char buffertosend[4096]) {
       //blabla
        pthread_t t1;
        pthread_create(&t1,0,&helpsend,this);
        }
    }
    static void network::client::helpsend(void* arg) {
        static_cast<client>(arg)->sending();
    }
    void network::client::sending() {
    //blabla
    }
    

    Fehler:

    /home/server/Desktop/networklib/network.cpp:41: Fehler: ungültige Umwandlung von »void (*)(void*)« in »void* (*)(void*)«
    /home/server/Desktop/networklib/network.cpp:41: Fehler:   Argument 3 von »int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)« wird initialisiert
    /home/server/Desktop/networklib/network.cpp: At global scope:
    /home/server/Desktop/networklib/network.cpp:45: Fehler: Elementfunktion »static void network::client::helpsend(void*)« kann nicht deklariert werden, statische Bindung zu haben
    /home/server/Desktop/networklib/network.cpp: In static member function »static void network::client::helpsend(void*)«:
    /home/server/Desktop/networklib/network.cpp:46: Fehler: keine passende Funktion für Aufruf von »network::client::client(void*&)«
    /home/server/Desktop/networklib/network.cpp:2: Anmerkung: Kandidaten sind: network::client::client(char*, int, bool)
    /home/server/Desktop/networklib/network.h:20: Anmerkung:                  network::client::client(const network::client&)
    

    Die Fehlermeldungen beziehen sich auf den oben geposteten Code.

    MFG ReduX :xmas1:



  • static void network::client::helpsend(void* arg) { 
        static_cast<client>(arg)->sending();}
    

    =>

    static void * network::client::helpsend(void* arg) { 
        static_cast<client*>(arg)->sending();return 0;}
    

    Die funktion gibt void* zurück und du castest auf client*



  • Hi,
    Habe nun alles soweit hinbekommen. Jedoch bekomme ich noch bei der deklaration der static funktion folgenden Fehler:

    Fehler: Elementfunktion »static void* network::client::helprecive(void*)« kann nicht deklariert werden, statische Bindung zu haben

    Mein C++ Buch hat da leider auch keine antwort darauf.

    Frohes Neues noch!
    MFG ReduX


Anmelden zum Antworten