c++ boost::线程操作符()()问题

C++ boost::thread operator()() question

本文关键字:问题 线程 boost c++ 操作符      更新时间:2023-10-16

这是我第一次尝试使用boost::threads,我有一个愚蠢的问题。我调用boost:线程来使用我的一个模板类函数。然而,在阅读本教程之后,它说要构建一个operator()(),我做到了。下面的代码能正常工作吗?

template <class S>
class SarsaL : public Task<S,Policy>, protected Method
{
  protected:
    ...
    void updateEpsilons(S* avoid);
    void step();
    ...
  public:
    ...
    void operator()();
    ...
};
template <class S>
void SarsaL<S>::operator()()
{
  updateEpsilons();
}
template <class S>
void SarsaL<S>::step()
{
   S* now_state =  Task<S,Policy>::checkIfAdd();
   ...
   ...
   boost::thread workerThread(&SarsaL<S>::updateEpsilons, this, now_state);
   ...
   ...
   workerThread.join();
}

我问的原因是因为我在没有参数的操作符中调用updateEpsilons(),但是在创建线程时我发送了参数now_state。这行得通吗?代码编译和执行没有错误,我只是困惑

如果在要执行的对象上提供方法(在本例中为updateEpsilons),则不必使用operator()()。显然,这个operator()()是不正确的,因为它没有使用参数调用适当的updateEpsilons方法。

注意,在本教程中,创建的新线程只提供了一个类的实例,而没有方法。在这种情况下,类必须实现operator()(),这是将为线程代码调用的。