2

从 boost::thread 文档看来,我可以通过执行以下操作将参数传递给线程函数:

boost::thread* myThread = new boost::thread(callbackFunc, param);

但是,当我这样做时,编译器会抱怨

没有重载函数需要 2 个参数

我的代码:

#include <boost/thread/thread.hpp>
void Game::playSound(sf::Sound* s) {
    boost::thread soundThread(playSoundTask, s);
    soundThread.join();
}

void Game::playSoundTask(sf::Sound* s) {
    // do things
}

我正在使用 Ogre3d 附带的 boost 副本,我想它可能已经很老了。不过,有趣的是,我查看了 thread.hpp,它确实具有用于具有 2 个或更多参数的构造函数的模板。

4

1 回答 1

6

问题是成员函数采用隐式的第一个参数Type*,其中Type是类的类型。这是在类型实例上调用成员函数的机制,这意味着您必须向boost::thread构造函数传递一个额外的参数。您还必须将成员函数的地址作为&ClassName::functionName.

我做了一个小的编译和运行示例,希望能说明使用:

#include <boost/thread.hpp>
#include <iostream>

struct Foo
{
  void foo(int i) 
  {
    std::cout << "foo(" << i << ")\n";
  }
  void bar()
  {
    int i = 42;
    boost::thread t(&Foo::foo, this, i);
    t.join();
  }
};

int main()
{
  Foo f;
  f.bar();
}
于 2013-03-06T23:04:23.317 回答