pthread ohne static



  • Warum uebergibst du nicht 'this' als letztes Argument? Und machst dann in der
    uebergebenen Funktion einfach einen Cast auf Showimag*?!

    mfg
    v R



  • Das ist schlicht und ergreifend nicht möglich. Wie schon gesagt funktioniert der Aufruf von non-static Methoden mittels eines zusätzlichen Parameters der letztlich den this-Zeiger darstellt. pthread_create() erwartet aber keine Methode, sondern eine Funktion, also etwas ohne Instanz, darum funktioniert es mit static, weil dadurch aus einer Methode "quasi" eine Funktion wird.

    Du kannst das Problem nur zweistufig lösen:

    void *showDisplay() {  std::cout<<"juhu"<<std::endl; return 0; }
       static void *showDisplayStarter(void *arg) { return static_cast<Showimag*>(arg)->showDisplay(); }
    
       void startDisplay() { pthread_create(&ShowThreadID, NULL, showDisplayStarter, this); }
    


  • Davon hab ich auch gesprochen 😉

    mfg
    v R



  • Klar, sorry Realisticer, das bezog sich natürlich nicht auf Deine Antwort, die war noch nicht da als ich auf Antworten geklickt habe. 🤡



  • Hutzli schrieb:

    Klar, sorry Realisticer, das bezog sich natürlich nicht auf Deine Antwort, die war noch nicht da als ich auf Antworten geklickt habe. 🤡

    Aso 🙂

    mfg
    v R



  • Ok Ich übergeb this als letztes argument das sieht dann so aus:

    pthread_create(&ShowThreadID, NULL, showDisplay,this);
    

    und wie cast ich nun in der übegeben Funktion auf Showimag????

    hab das so probiert:

    static void *showDisplay(void *arg) 
       {
    	  std::cout<<"blaaaa"<<Showimag::aha<<std::endl; return 0; 
       }
    
       void startDisplay() 
       {
    	aha=6;
        pthread_create(&ShowThreadID, NULL, showDisplay,this);
       }
    
       private:
    
       pthread_t ShowThreadID;     //thread
    
       int aha;
    

    aber da kommt folgende Fehlermeldung vom Compiler :

    .cc: In static member function static void* Showimag::showDisplay(void*)': .cc:29: error: memberShowimag::aha' is non-static but
    referenced as a static member
    .cc:16: error: at this point in file
    .cc:16: confused by earlier errors, bailing out



  • Hast du dir Hutzli's Beispiel ueberhaupt mal angeschaut? 😉

    mfg
    v R



  • hab mein Beitrag geschrieben bevor ich hutzlis beispiel gesehn hab...
    Jetzt tut es ich danke auch beiden ganz doll

    mfg oli 23



  • Jetzt frag ich einfach nur nochmal nach...

    die zeile kann mir die jemand erklähren???

    { return static_cast<Showimag*>(arg)->showDisplay(); }
    

    mfg oli 23



  • void *showDisplay() {  std::cout<<"juhu"<<std::endl; return 0; }
       static void *showDisplayStarter(void *arg) { return static_cast<Showimag*>(arg)->showDisplay(); }
    
       void startDisplay() { pthread_create(&ShowThreadID, NULL, showDisplayStarter, this); }
    

    oli 23,
    du gibst showDisplayStarter als Parameter den Thiszeiger mit.
    Diesen musst du dann wieder von void zurückcasten.

    Der Thiszeiger ist aber sehr wichtig, weil du sonst nicht weißt in welcher Instanz zu gerade bist.


Anmelden zum Antworten