如何将类中的函数放入线程? (使用Boost的C ++)

时间:2010-11-08 10:07:31

标签: c++ multithreading class function boost

我的课程包含printf("hello main thread");printf("hello thread created inside class");等功能。理论上每个都可以使用类变量。如何将其中一个函数放入线程? (使用Boost库的C ++)

3 个答案:

答案 0 :(得分:4)

看看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 link

所以你基本上可以这样做:

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

答案 1 :(得分:2)

您可以使用Boost.Bind

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

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

答案 2 :(得分: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();
    }
}