在C++中将成员函数的线程声明为class的成员

declare a thread of member function as a member of the class in C++

如何在一个线程里面声明一个class哪个运行一个成员函数? 我根据网上搜索尝试了几种方法: 这个

std::thread t(&(this->deQRequest));

这个

std::thread t([this]{ deQRequest(); });

这个

std::thread t(&this::deQRequest, this);

std::thread t(&this::deQRequest, *this);

None 其中有效。

然后我尝试了下面的代码,它有效:

    std::thread spawn() {
        return std::move(
            std::thread([this] { this->deQRequest(); })
            );
    }

但我的问题是,为什么会这样

   std::thread t([this]{ deQRequest(); });

不起作用?总是提示错误:"Explicit type is missing, 'int' assumed" and "expected a declaration" .

我的deQRequest函数是同一个class中的成员函数,我的class是这样的:

  class sender{
      public:
          void deQRequest(){
             //some execution code
          };
      private:
        // here I try to declare a thread like this:std::thread t([this]{ deQRequest(); });
   }

but my question is, why this

std::thread t([this]{ deQRequest(); });

doesn't work? it always reminds an error: "Explicit type is missing, 'int' assumed" and "expected a declaration".

这不是有效的 lambda 函数语法。 thisdeQRequest的隐式参数,不能这样传。

std::thread's constructor reference 开始,它接受一个函数参数,以及应该传递到那里的参数:

template< class Function, class... Args > 
explicit thread( Function&& f, Args&&... args );

你的class

 class sender{
 public:
    void deQRequest(){
        //some execution code
    };
 private:
    void foo() { // I just assume you're using some private function
        // here I try to declare a thread like 
        // this:std::thread t([this]{ deQRequest(); });
    }

    std::thread theThread; // I also assume you want to have a `std::thread`
                           // class member.
 }; // <<< Note the semicolon BTW

声明一个成员函数,你需要std::bind()那个成员函数到一个(你当前的)class实例:

    void foo() {
       theThread = std::thread(std::bind(&sender::deQRequest,this));
    }