在C++中将成员函数的线程声明为class的成员
declare a thread of member function as a member of the class in C++
如何在一个线程里面声明一个class哪个运行一个成员函数?
我根据网上搜索尝试了几种方法:
这个
std::thread t(&(this->deQRequest));
这个
std::thread t([this]{ deQRequest(); });
这个
std::thread t(&this::deQRequest, this);
或
std::thread t(&this::deQRequest, *this);
None 其中有效。
然后我尝试了下面的代码,它有效:
std::thread spawn() {
return std::move(
std::thread([this] { this->deQRequest(); })
);
}
但我的问题是,为什么会这样
std::thread t([this]{ deQRequest(); });
不起作用?总是提示错误:"Explicit type is missing, 'int' assumed" and "expected a declaration" .
我的deQRequest函数是同一个class中的成员函数,我的class是这样的:
class sender{
public:
void deQRequest(){
//some execution code
};
private:
// here I try to declare a thread like this:std::thread t([this]{ deQRequest(); });
}
but my question is, why this
std::thread t([this]{ deQRequest(); });
doesn't work? it always reminds an error:
"Explicit type is missing, 'int' assumed" and "expected a declaration".
这不是有效的 lambda 函数语法。 this
是deQRequest
的隐式参数,不能这样传。
从 std::thread
's constructor reference 开始,它接受一个函数参数,以及应该传递到那里的参数:
template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
你的class
class sender{
public:
void deQRequest(){
//some execution code
};
private:
void foo() { // I just assume you're using some private function
// here I try to declare a thread like
// this:std::thread t([this]{ deQRequest(); });
}
std::thread theThread; // I also assume you want to have a `std::thread`
// class member.
}; // <<< Note the semicolon BTW
声明一个成员函数,你需要std::bind()
那个成员函数到一个(你当前的)class实例:
void foo() {
theThread = std::thread(std::bind(&sender::deQRequest,this));
}
如何在一个线程里面声明一个class哪个运行一个成员函数? 我根据网上搜索尝试了几种方法: 这个
std::thread t(&(this->deQRequest));
这个
std::thread t([this]{ deQRequest(); });
这个
std::thread t(&this::deQRequest, this);
或
std::thread t(&this::deQRequest, *this);
None 其中有效。
然后我尝试了下面的代码,它有效:
std::thread spawn() {
return std::move(
std::thread([this] { this->deQRequest(); })
);
}
但我的问题是,为什么会这样
std::thread t([this]{ deQRequest(); });
不起作用?总是提示错误:"Explicit type is missing, 'int' assumed" and "expected a declaration" .
我的deQRequest函数是同一个class中的成员函数,我的class是这样的:
class sender{
public:
void deQRequest(){
//some execution code
};
private:
// here I try to declare a thread like this:std::thread t([this]{ deQRequest(); });
}
but my question is, why this
std::thread t([this]{ deQRequest(); });
doesn't work? it always reminds an error: "Explicit type is missing, 'int' assumed" and "expected a declaration".
这不是有效的 lambda 函数语法。 this
是deQRequest
的隐式参数,不能这样传。
从 std::thread
's constructor reference 开始,它接受一个函数参数,以及应该传递到那里的参数:
template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
你的class
class sender{
public:
void deQRequest(){
//some execution code
};
private:
void foo() { // I just assume you're using some private function
// here I try to declare a thread like
// this:std::thread t([this]{ deQRequest(); });
}
std::thread theThread; // I also assume you want to have a `std::thread`
// class member.
}; // <<< Note the semicolon BTW
声明一个成员函数,你需要std::bind()
那个成员函数到一个(你当前的)class实例:
void foo() {
theThread = std::thread(std::bind(&sender::deQRequest,this));
}