Как поместить функцию внутри класса в поток? (C ++ с использованием Boost) - PullRequest
0 голосов
/ 08 ноября 2010

У меня есть класс с некоторыми функциями, такими как printf("hello main thread"); и printf("hello thread created inside class");. Каждый теоретически может использовать переменные класса. Как поместить одну из этих функций в поток? (C ++ с использованием библиотек Boost)

Ответы [ 3 ]

4 голосов
/ 08 ноября 2010

Взгляните на 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"));

Должен это сделать.

Однако обратите внимание, что boost::thread имеет конструктор, который уже делает это: см. thisссылка .

Таким образом, вы можете просто сделать:

boost::thread(&Class::method, &instance, "hello main thread");
2 голосов
/ 08 ноября 2010

Для этого вы можете использовать Boost.Bind.

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

Foo foo;
boost::thread(boost::bind(&Foo::someMethod, &foo, "Text"));
1 голос
/ 08 ноября 2010
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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...