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
A
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");
Je suis confus, qu'entendez-vous par * chacun peut théoriquement utiliser des variables de classe *? –
@ Space_C0wb0y: Je suppose qu'il voulait dire une "méthode" – ereOn
Qu'est-ce qui met une fonction dans le fil exactement? – valdo