有一个话题 Start thread with member function
这是一个给出的例子:
#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();
}
但现在问题是我需要在不同的函数中使用线程变量,所以我需要将代码分成两部分std::thread t(&bar::foo, bar());
和t.join();
我使用以下内容:
class A {
public:
std::thread t;
void foo();
void use0();
void use1();
}
A::foo()
{
}
A::use0()
{
std::thread t(&A::foo);
}
A::use1()
{
t.join();
}
我收到错误std::invoke : No match was found for the overloaded function
。
我该怎么办?非常感谢!
答案 0 :(得分:1)
要在另一个线程中执行非静态成员函数,您还需要传递类的实例:
std::thread t(&A::foo, this);
您在std::thread
中创建了一个本地use0
(并且在销毁之前您没有调用std::thread::join
)。改为分配给成员t
:
t = std::thread(&A::foo, this);
在成员函数定义中,类定义和返回类型(void
s)之后缺少分号。