funktionszeiger auf memberfunktion



  • ich möchte mit pthread_create einen neuen thread erzeugen. dieser thread soll aus einer memberfuntion einer klasse gestarted werden und auch in einer member funtion der selben klasse laufen.

    ich stelle mir das ungefähr so vor:

    void *client::_update(void *arg) {...}
    
    void client::update()
    {
    pthread_t t;
    
    pthread_create(&t, NULL, &client::_update, NULL);
    }
    

    nur meldet der compiler folgenden fehler:

    error: cannot convert `void*(client::)(void)' to `
    void*()(void)' for argument `3' to `int pthread_create(pthread_t*, const
    pthread_attr_t*, void*()(void), void*)'

    weiß jemand wie ich das machen kann?



  • class foo {
      void bar() { }
    };
    
    void bar_callback(void *this_) { static_cast<foo*>(this_)->bar(); }
    
    int main() {
      foo obj;
      //...
      pthread_create(&t, NULL, &client::_update, &obj);
    }
    

    Memberfunktionen (außer statische Funktionen) müssen ja immer via eines Objektpointers aufgerufen werden.



  • danke. so funktionierd es.


Anmelden zum Antworten