我想為執行緒分配一個名稱,執行緒本身必須這樣做。該執行緒是類 foo 的類成員。我想用 lambda 啟動這個執行緒,但不幸的是我收到錯誤訊息: no match for call to '(std::thread) (foo::start()::<lambda()>)
有人可以向我解釋問題出在哪里嗎?以前我創建了一個臨時執行緒物件,并將其與執行緒“管理”一起移動,但是,我無法給出名稱。
class foo {
public:
int start()
{
this->manage([this](){
auto nto_errno = pthread_setname_np(manage.native_handle(),"manage"); // Give thread an human readable name (non portable!)
while(1){
printf("do work");
}
});
return 1;
}
private:
int retVal;
std::thread manage;
};
uj5u.com熱心網友回復:
您以錯誤的方式傳遞了 lambda,初始化后無法再次初始化管理執行緒。您應該創建一個新的 std::thread 并分配它。以下編譯并確實列印“管理”。
class foo {
public:
int start()
{
manage = std::thread([this]{
auto nto_errno = pthread_setname_np(manage.native_handle(),"manage");
char name[16];
pthread_getname_np(pthread_self(), &name[0], sizeof(name));
cout << name << endl;
});
manage.join();
return 1;
}
private:
int retVal;
std::thread manage;
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/447440.html
下一篇:如何在java中使用同步塊?
