使用相同类的方法启动线程

时间:2018-09-18 07:02:57

标签: c++ multithreading

因此,我正在为个人游戏项目编写输入系统类,并且试图为侦听键盘输入的循环创建线程。

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);

0 个答案:

没有答案