我有一个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;
}
我做错了什么?
答案 0 :(得分:1)
尝试将线程函数设置为静态。
即:
static void Engine::windowThread(
unsigned int width,
unsigned int height,
const std::string & title)
{
Window w(width, height, title);
}
如果需要传递类实例,则为该指针使用额外的参数。