Qopenglwidget和多线程
QOpenGLWidget and multithreading
我正在使用QT和OpenGL开发一个3D应用程序。该应用程序由QMAINWINDOW组成,其Qopenglwidget为中央小部件,将QML UI作为码头小部件组成。我意识到用户输入和UI取决于渲染性能:如果我的应用程序以低FPS运行,则并非全部捕获用户输入,并且很难使用UI。
所以我正在考虑在单独的线程中进行渲染。我尝试了几种技术,例如使用QTimer或Qthread,但是我总是在共享OpenGL上下文,调整或使用QPainter时遇到问题。
。我想知道在另一个线程中进行渲染是否是一种很好的方法。
有任何建议,建议?
谢谢。
典型的GUI框架不是直接从多个线程中使用的,QT也不是例外。尝试从不同线程进行GUI操作通常会导致某种问题。
那些框架通常具有内部事件队列,其中将事件放入然后进行一个接一个地处理,如果正确使用该框架,则可以确保仅从一个线程访问GUI相关的内容。但是他们允许在队列中添加其他事件。
在这里我们要走:将整个GUI保留在一个线程中,然后在另一个线程中进行用户输入处理。一旦处理用户数据,请适当地喂食您的GUI。
QT提供的方法是e。G。调用功能或事件系统。
只是不使用 QOpenGLWidget
。为所有内容使用单个QML窗口。
通过使用QQuickWindow::beforeRendering()
或QQuickWindow::afterRendering()
信号,在QML的前渲染或渲染后功能中渲染您的openGL事物。
将使用QML的渲染线程,因此您无需创建它。QT文档中解释了用例和同步:
http://doc.qt.io/qt-5/qtquick-scenegraph-openglunderqml-example.html
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 为什么一个向量上的多线程操作很慢
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 全局变量 多读取器 一个写入器多线程安全?
- boost::文件系统::recursive_directory_iterator多线程安全
- 如何阻止TensorFlow的多线程
- 如何在多线程中正确使用unique_ptr进行多态性?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- sigwait() 在多线程程序中不起作用
- 多线程程序中出现意外的内存泄漏
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 多线程比没有线程C++慢
- 具有 C++11 多线程的特征库
- 通过安装信号处理程序关闭多线程应用程序
- 成员变量在多线程 C++ 时自行更改
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误