首頁  >  問答  >  主體

syntax - C++11 thread呼叫物件的成員函數

如果掉一個類別的成員函數,大概是這樣。

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

但如果希望這個類別的特定對象,執行這個操作,怎麼處理?

迷茫迷茫2734 天前1037

全部回覆(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
  • 取消回覆