如果掉一個類別的成員函數,大概是這樣。
clientThread = std::thread(&Client::sendMessage,“message”);
但如果希望這個類別的特定對象,執行這個操作,怎麼處理?
业精于勤,荒于嬉;行成于思,毁于随。
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
參考C plus plus
參數 fn 指向函數的指標、指向成員的指標或任何類型的可移動構造的函數物件(即,其類別定義了operator()的對象,包括閉包和函數物件)。 回傳值(如果有)將被忽略。 args... 傳遞給 fn 呼叫的參數(如果有)。它們的類型應該是可移動構造的。 如果 fn 是成員指針,第一個參數應是定義該成員的物件、引用或指向它的指針)。 x 狀態被移到建構物件的執行緒物件。
類似std::thread(&C::increase_member,std::ref(bar),1000)
std::thread(&C::increase_member,std::ref(bar),1000)
std::thread 呼叫類別的成員函數需要傳遞類別的一個物件作為參數:
如果是在類別的成員函數中處理thread,傳入 this 即可,如:
參考:stackoverflow
參考C plus plus
雷雷類似
std::thread(&C::increase_member,std::ref(bar),1000)