C ++在boost线程中调用成员函数

时间:2013-06-17 07:12:40

标签: c++ boost-thread

所以我想在boost线程中启动成员函数Open()

.HPP

Class MyClass{
  public:
    int Open();
  private:
    void handle_thread();
};

的.cpp

int MyClass::Open(){
    boost::thread t(handle_thread);
    t.join();
    return 0;
}

void MyClass::handle_thread(){
  //do stuff
}

test.cpp
int main(){
     MyClass* testObject = new MyClass()
     testObject.Open();
}

这会导致编译器错误。

error: no matching function for call to 'boost::thread::thread(<unresolved overloaded function type>)'

我看到Open()不知道调用handle_thread的对象。但我无法弄清楚正确的语法是什么。

1 个答案:

答案 0 :(得分:1)

handle_thread是一个成员函数,必须这样调用:

int MyClass::Open(){
    boost::thread t(&MyClass::handle_thread, this);
    ...
}

请注意,如果您之后立即join线程,则您的功能将被阻止。除了handle_thread实际上在不同的线程上运行之外,该行为将与单线程应用程序的行为相同。但是没有线程交错(即没有并行性)。