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