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

时间:2014-02-10 19:16:26

标签: c++ multithreading opengl

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

void threadTest() {  
    Window w(800, 600, "Hallo Welt");  
}

int main() {
    std::thread t(threadTest);
    sleep(5);
    t.join();
    return 0;
}  

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

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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

即:

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

     Window w(width, height, title);
 }

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