2010-03-18 7 views
1

Je joue avec C++ et pthreads et jusqu'ici tout va bien. Je peux accéder à une fonction de membre de classe si elle est statique et j'ai lu que je peux accéder à une fonction membre de classe normale si je transmets "this" comme argument avec pthread_create, car C++ le fait sous le capot. Mais mon problème est que je veux donner un int à cette fonction, et je ne sais pas comment faire plusieurs arguments avec pthread_create.pthreads et C++

Répondre

6

Passez un pointeur struct.

struct Arg { 
    MyClass* _this; 
    int  another_arg; 
}; 

... 

Arg* arg = new Arg; 
arg->_this = this; 
arg->another_arg = 12; 
pthread_create(..., arg); 
... 
delete arg; 
+0

Que dois-je faire avec les _this dans la fonction C++? Rien? – vincentkriek

+0

@user: Pour "accéder à un membre normal de la classe". – kennytm

+0

Je pense que je n'étais pas clair, de laisser pthread_create exécuter les fonctions C++ dont ils ont besoin pour être statiques. Je voudrais qu'ils ne soient pas statiques, si c'est possible. – vincentkriek

0

vous pouvez stimuler la bibliothèque de fil et utiliser boost :: bind() Voici un exemple

class MyThread 
{ 
public: 
    MyThread(/* Your arguments here */) : m_thread(NULL) 
    { 
     m_thread = new boost::thread(boost::bind(&MyThread::thread_routine, this)); 
    } 

    ~MyThread() 
    { 
     stop(); 
    } 

    void stop() 
    { 
     if (m_thread) 
     { 
      m_thread->interrupt(); 
      m_thread->join(); 
     } 
    } 

private: 
    void thread_routine() {... /* you can access a/b here */} 


private: 
    int a; 
    int b; 
    boost::thread *m_thread; 
}; 
Questions connexes