我正在尝试使用libx11创建一个多线程的OpenGL应用程序,每个窗口对应一个单独的线程,再加上一个管理线程。
在管理线程中有一个事件循环:
while(true)
while(XQLength(mPlatformData->display)){
XNextEvent(mPlatformData->display, &event);
std::cout << "event" << std::endl;
}
}
这是一个适用于单线程应用程序的优秀事件循环,但在这种多线程设置下会发生奇怪的事情。
当我创建一个窗口时,我需要禁用事件队列,否则GLXMakeCurrent将会挂起 - 我的整个线程停止,什么也不做。
我在网上找不到关于多线程X11应用程序的太多信息,我应该以不同的方式处理我的事件吗?