强制OpenGL渲染总是运行在相同的(Q)线程在Qt
Force OpenGL rendering to run always on same (Q)Thread in Qt
我创建了一个使用Qt GUI进行图像处理的应用程序。对于一部分计算,OpenGL用于渲染转换后的图像(屏幕外)。一切都很好。但是,当在GUI线程中单击按钮时,我完成了所有繁重的处理。由于计算需要几秒钟,因此GUI变得无响应。
幸运的是Qt已经包含了一个线程库(QThread
, QtConcurrent
等)。现在我只是使用QtConcurrent::run()
和QFutureWatcher<cv::Mat>
与回调函数异步地进行计算。问题是,在计算过程中,OpenGL函数被调用多次,现在可以在不同的线程上运行连续的按钮点击。如果渲染是在不同的线程上完成的,而不是在OpenGL初始化的线程上,OpenGL什么也不渲染(黑屏)。当然,这取决于Qt的线程处理。
所以我的问题是:是否有一个简单的解决方案使用当前的设置(Qt线程和OpenGL)没有额外的库等强制渲染总是在同一线程上运行。
我知道有一个方法QObject::moveToThread()
,但我不知道在这种情况下如何使用它。OpenGL的东西不包含任何qt相关的代码或函数。那么我该如何解决这个问题呢?
我也无法确定某个QThread
是否总是使用相同的底层本地线程。是这样吗?
这是一种方法。你创建一个线程,只要你需要,它就存在,你可以给它添加任务。您可以替换QThread或使用std::thread.
相关文章:
- 我可以使用Qt线程ID为每个线程创建唯一的缓存吗?
- Qt 线程两个参数
- 从QTcpSocket上的数据流中连续运行复杂算法的最佳Qt线程解决方案是什么
- QT 5:从非QT线程发射信号
- 从另一个(非 qt)线程调用 QObject 方法的线程安全性?
- 无法在线程运行方法中运行CryptoPP FileSink的情况下终止Qt线程
- QT线程中的Lua脚本
- 显示Q对话框时出现QT线程问题
- Qt线程设计生产者消费者
- 在退出应用程序时安全退出Qt线程
- Qt 线程等待来自 GUI 的输入
- 在Qt线程之间发送大量数据
- 带有 movetothread的 qt 线程
- 在Qt线程中应用OpengGL着色器
- Qt线程同步设计
- Qt 线程,来自 QObject 的析构函数的崩溃移动
- 使用 QT 线程解决运行时问题
- 使用Qt线程和信号的缓冲区溢出
- Qt线程在内核上的共享似乎并不均等
- 使用Qt线程的最小示例