<分区>
我在代码中使用 std::thread 时遇到问题:
Class Timer
{
...
public:
void Start(bool Asynch = true)
{
if (IsAlive())
{
return;
}
alive = true;
repeat_count = call_number;
if (Asynch)
{
t_thread = std::thread(&ThreadFunc, this);
}
else
{
this->ThreadFunc();
}
}
void Stop()
{
alive = false;
t_thread.join();
}
...
}
出现以下错误:
error C2276: '&': illegal operation on bound member function expression
t_thread是类的私有(private)std::thread实例,ThreadFunc()是返回void的类的私有(private)成员函数;
我想我知道有两种方法可以将成员函数发送到 std::thread,如果函数是静态的,我会使用 t_thread = std::thread(threadfunc);但我不希望 ThreadFunc 是静态的,这样做会给我带来错误。
我想我通过创建另一个函数解决了这个问题:
std::thread ThreadReturner()
{
return std::thread([=] { ThreadFunc(); });
}
...
t_thread = ThreadReturner();
这样我就不会出错,但我不明白为什么第一个不起作用。
感谢任何帮助。
我的问题看起来是重复的,但只有 1 个不同,在另一个问题的答案中,std::thread 在类声明或实现之外使用,它在 main() 中,在这种情况下指定范围是有意义的对我来说,但不是在类内部调用 std::thread 时。这是我看到的唯一区别,也是我制作此主题的原因,对于可能的重复,我们深表歉意。