OpenGL 在第二个线程中,在类中启动

OpenGL in a second thread, which is started in a class

本文关键字:启动 线程 第二个 OpenGL      更新时间:2023-10-16

我有一个 Window 类,它创建一个 OpenGL 窗口并启动渲染循环。如果我在 main 的线程中创建一个窗口,它可以工作。

void threadTest() {  
    Window w(800, 600, "Hallo Welt");  
}
int main() {
    std::thread t(threadTest);
    sleep(5);
    t.join();
    return 0;
}  

但是,如果我在引擎类中创建线程,它会出现段错误。

void Engine::createWindow(unsigned int width, unsigned int height, const std::string & title) {
    m_rendering = new std::thread(&Engine::windowThread, * this, width, height, title);
}
void Engine::windowThread(unsigned int width, unsigned int height, const std::string & title) {
    Window w(width, height, title);
}
int main() {
    Engine e;
    e.createWindow(800, 600, "Hallo Welt");
    sleep(5);
    return 0;
}  

我做错了什么?

尝试将线程函数设置为静态。

即:

 static void Engine::windowThread(
     unsigned int width, 
     unsigned int height, 
     const std::string & title) 
 {
     Window w(width, height, title);
 }

如果需要传递类实例,请为 this 指针使用额外的参数。