2

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

.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。但我无法弄清楚正确的语法是什么。

4

1 回答 1

1

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

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

请注意,如果您join紧接着线程,您的函数将被阻塞。handle_thread除了实际在不同线程上运行的事实之外,该行为将与单线程应用程序的行为相同。但是不会有线程交错(即没有并行性)。

于 2013-06-17T07:16:01.537 回答