2010-11-08 12 views
0

J'ai une classe avec quelques fonctions comme printf("hello main thread"); et printf("hello thread created inside class");. Chacun peut théoriquement utiliser des variables de classe. Comment mettre une de ces fonctions dans le fil? (C++ en utilisant des bibliothèques Boost)Comment mettre la fonction à l'intérieur d'une classe dans un thread? (C++ using Boost)

+0

Je suis confus, qu'entendez-vous par * chacun peut théoriquement utiliser des variables de classe *? –

+0

@ Space_C0wb0y: Je suppose qu'il voulait dire une "méthode" – ereOn

+0

Qu'est-ce qui met une fonction dans le fil exactement? – valdo

Répondre

1
typedef boost::shared_ptr<boost::thread> thread_ptr; 

class your_class : boost::noncopyable { 
public: 
    void run(); 
    void join(); 
    void signal_stop(); 

private: 
    void your_thread_func(); 
    thread_ptr thread_; 
}; 

void your_class::run() 
{ 
    thread_ = thread_ptr(new boost::thread(boost::bind<void>(&your_class::your_thread_func, this))); 
} 
void your_class::join() 
{ 
    if (thread_) { 
     thread_->join(); 
    } 
} 
2

Vous pouvez utiliser Boost.Bind pour cela.

class Foo { 
public: 
    void someMethod(const std::string & text); 
}; 

Foo foo; 
boost::thread(boost::bind(&Foo::someMethod, &foo, "Text")); 
4

Jetez un coup d'œil à boost::bind.

class Class 
{ 
    public: 
    void method(const char*); 
}; 

// instance is an instance of Class 
boost::thread(boost::bind(&Class::method, &instance, "hello main thread")); 

Doit le faire.

Cependant, notez que boost::thread a un constructeur qui le fait déjà: voir this link.

Vous pouvez donc fondamentalement juste faire:

boost::thread(&Class::method, &instance, "hello main thread");