使用 lambda 启动一个具有 class 属性的线程
use a lambda to start a thread which is a class attribute
我想给一个线程分配一个名字,线程本身必须这样做。该线程是 class foo 的 class 成员。
我想用 lambda 开始这个线程,但不幸的是我收到错误消息:
不匹配调用'(std::thread) (foo::start()::)
有人可以向我解释一下问题出在哪里吗?
之前我已经创建了一个临时线程对象,并将其移动到线程“管理”上,但是,我不能给出任何名称。
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;
};
您以错误的方式传递了 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;
};
我想给一个线程分配一个名字,线程本身必须这样做。该线程是 class foo 的 class 成员。
我想用 lambda 开始这个线程,但不幸的是我收到错误消息:
不匹配调用'(std::thread) (foo::start()::
有人可以向我解释一下问题出在哪里吗? 之前我已经创建了一个临时线程对象,并将其移动到线程“管理”上,但是,我不能给出任何名称。
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;
};
您以错误的方式传递了 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;
};