首页  >  问答  >  正文

syntax - C++11 thread调用对象的成员函数

如果掉一个类的成员函数,大概是这样。

clientThread = std::thread(&Client::sendMessage,“message”);

但如果希望这个类的特定对象,执行这个操作,怎么处理?

迷茫迷茫2735 天前1039

全部回复(2)我来回复

  • 某草草

    某草草2017-05-16 13:24:21

    std::thread 调用类的成员函数需要传递类的一个对象作为参数:

    #include <thread>
    #include <iostream>
    
    class bar {
    public:
      void foo() {
        std::cout << "hello from member function" << std::endl;
      }
    };
    
    int main()
    {
      std::thread t(&bar::foo, bar());
      t.join();
    }

    如果是在类的成员函数中处理thread,传入 this 即可,如:

    std::thread spawn() {
        return std::thread(&blub::test, this);
      }

    参考:stackoverflow

    回复
    0
  • 怪我咯

    怪我咯2017-05-16 13:24:21

    参考C plus plus

    参数
    fn
    指向函数的指针、指向成员的指针或任何类型的可移动构造的函数对象(即,其类
    定义了operator()的对象,包括闭包和函数对象)。
    返回值(如果有)将被忽略。
    args...
    传递给 fn 调用的参数(如果有)。它们的类型应该是可移动构造的。 如果 fn 是成员指针,则第一个参数应是定义该成员的对象、引用或指向它的指针)。
    x
    状态被移动到构造对象的线程对象。

    雷雷

    类似这样std::thread(&C::increase_member,std::ref(bar),1000)

    回复
    0
  • 取消回复