如何在课堂上使用线程?

Why*_*ork 7 c++ opengl multithreading

我正在尝试为我的OpenGL项目创建一个加载屏幕并阅读它以使其正常工作,最好使用线程.我试图用我的线程调用我的函数,但我不断收到这些错误:

错误C2064:术语不评估为采用3个参数的函数

智能感知:无构造"的std ::螺纹::线程"的实例相匹配的参数列表参数类型有:(无效(屏幕*newScreen,布尔activeVisuals,布尔activeControls),播放屏幕*,布尔,布尔)

这是我的代码:

//LoadingScreen
class LoadingScreen
{
    LoadingScreen();
    void LoadNewScreen(Screen* newScreen, bool activeVisuals, bool activeControls);
    void Setup();
};

void LoadingScreen::LoadNewScreen(Screen* newScreen, bool activeVisuals, bool activeControls)
{

}

void LoadingScreen::Setup()
{
    PlayScreen *playScreen = new PlayScreen();
    std::thread first(LoadingScreen::LoadNewScreen,playScreen, true, true);// , playScreen, true, true);

    first.join();
}

//source.cpp
LoadingScreen loadingScreen;
int main()
{
    LoadingScreen loadingScreen = LoadingScreen();
    loadingScreen.Setup();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Axa*_*alo 5

您需要传递一个附加参数,该参数是其成员函数作为第一个参数传递的类的实例.

std::thread first(&LoadingScreen::LoadNewScreen, this, playScreen, true, true);
                                             //  ^^^^ <= instance of LoadingScreen
Run Code Online (Sandbox Code Playgroud)

需要附加参数,因为这是实际调用的内容LoadNewScreen.

this->LoadNewScreen(playScreen, true, true);
Run Code Online (Sandbox Code Playgroud)

  • @WhyYouNoWork因为那就是调用**LoadNewScreen**.`this-> LoadNewScreen(playScreen,true,true);` (2认同)