因此,我正在为个人游戏项目编写输入系统类,并且试图为侦听键盘输入的循环创建线程。
void InputSystem::MainLoop()
{
while (true)
{
int x = _getch();
std::cout << "pressed " << x << std::endl;
for (Binding i : i_bindings)
{
if (i.b_target == x)
{
i.b_function();
}
}
}
}
InputSystem::InputSystem()
{
loop = new std::thread(InputSystem::MainLoop);
}
但是,使用所示的线程构造函数调用新线程会引发这些错误
'std::invoke': no matching overloaded function found
Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'
当我使用引用传递(&InputSystem :: MainLoop)时,会发生相同的错误 我已经在类之外尝试了该函数,并且该函数确实可以成功运行,但是我无法访问InputSystem类中的变量。
在创建新线程时从中调用函数时,我是否缺少步骤?与MainLoop在类内相比,当函数在类外时为何能起作用?
编辑:修复了该问题,调查了重复的线程,并建议创建一个新的“ bar”类,但在我的情况下,这将是内存分配的无限循环。使用对当前类的引用来使其正常工作。
loop = new std::thread(&InputSystem::MainLoop, this);