C++ 使用boost的多线程:编译器错误

C++ 使用boost的多线程:编译器错误,c++,multithreading,boost,g++,C++,Multithreading,Boost,G++,我正在尝试封装一个线程,如下所示: 但不知怎的,我甚至不能编译我的程序。。这: /** * */ void AcceptConnectionThread::start(int param) { m_thread = boost::thread(&AcceptConnectionThread::AcceptConnectionThreadRun, this, 0); } /** * */ int AcceptConnectionThread::AcceptConnecti

我正在尝试封装一个线程,如下所示:

但不知怎的,我甚至不能编译我的程序。。这:

/**
 *
 */
void AcceptConnectionThread::start(int param)
{
  m_thread = boost::thread(&AcceptConnectionThread::AcceptConnectionThreadRun, this, 0);
}


/**
 *
 */
int AcceptConnectionThread::AcceptConnectionThreadRun()
{
  return 0;
}
就给我这个,

Description Resource    Path    Location    Type   required from `boost::_bi::bind_t<R, F, L>::result_type boost::_bi::bind_t<R, F, L>::operator()() [with R = void; F = int (*)(); L = boost::_bi::list2<boost::_bi::value<AcceptConnectionThread*>, boost::_bi::value<int> >; boost::_bi::bind_t<R, F, L>::result_type = void]’   ServerNetwork       line 20, external location: /usr/include/boost/bind/bind_template.hpp   C/C++ Problem
Description Resource    Path    Location    Type   required from ‘void boost::detail::thread_data<F>::run() [with F = boost::_bi::bind_t<void, int (*)(), boost::_bi::list2<boost::_bi::value<AcceptConnectionThread*>, boost::_bi::value<int> > >]’    ServerNetwork       line 62, external location: /usr/include/boost/thread/detail/thread.hpp C/C++ Problem
Description Resource    Path    Location    Type too many arguments to function ServerNetwork       line 313, external location: /usr/include/boost/bind/bind.hpp   C/C++ Problem
使用


如果您将
AcceptConnectionThreadRun
声明改为获取参数,该怎么办?@didierc教程说“Worker::start()方法生成将运行processQueue方法的线程。注意我们如何将其作为第一个绑定参数传递?因为我们使用的是实例方法(而不是类方法或常规函数),我们必须确保第一个参数是实例指针。N参数是线程函数的第一个实际参数,从其签名中可以看出。”我不知道如何解决这一问题。但它无论如何都应该会起作用。猜猜是什么导致了问题?一个疏忽。这个绑定操作符需要将实例和参数传递给方法,但与不接受任何参数的方法相比,这里有一个额外的参数
0
。有关
boost::bind
的详细信息,请参阅,
0
可能应该是传递给
AcceptConnectionThread::start
param
值,但我没有尝试本教程,因此对此持保留态度(除非你不喜欢盐).我并没有真正找到解决方案..目前我正在启动一个没有任何参数的线程,但迟早我将不得不更改此。。
template <class F,class A1,class A2>
thread(F f,A1 a1,A2 a2):
    thread_info(make_thread_info(boost::bind(boost::type<void>(),f,a1,a2)))
{
    start_thread();
}
/**
 *
 */
void AcceptConnectionThread::start(int param)
{
  m_thread = boost::thread(&AcceptConnectionThread::AcceptConnectionThreadRun);
}


    /**
     *
     */
    void AcceptConnectionThread::start(int param)
    {
      int para_to_pass = 0;
      m_thread = boost::thread( boost::bind(&AcceptConnectionThread::AcceptConnectionThreadRun, this, para_to_pass));
    }


    /**
     *
     */
    int AcceptConnectionThread::AcceptConnectionThreadRun(int para)
    {
      // use para
      return 0;
    }