gpt4 book ai didi

c++ - 强制 OpenGL 渲染始终在 Qt 中的同一 (Q) 线程上运行

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:23 29 4
gpt4 key购买 nike

我创建了一个带有 Qt GUI 的应用程序来进行图像处理。对于计算的一部分,OpenGL 用于渲染转换后的图像(离屏)。一切正常。但是,当在 GUI 线程中单击按钮时,我完成了所有繁重的处理。由于计算需要几秒钟,因此 GUI 变得无响应。

幸运的是,Qt 已经包含了一个线程库(QThreadQtConcurrent 等)。现在我只用 QtConcurrent::run()和一个 QFutureWatcher<cv::Mat>使用回调函数异步进行计算。问题在于,在计算过程中,OpenGL 函数被多次调用,现在可以在不同的线程上运行连续的按钮点击。如果渲染是在与初始化 OpenGL 的线程不同的线程上完成的,则 OpenGL 不渲染任何内容(黑屏)。当然这取决于Qt的线程处理。

所以我的问题是:是否有一个简单的解决方案使用当前设置(Qt 线程和 OpenGL)而不需要额外的库等来强制渲染始终在同一线程上运行。

我知道有一个方法 QObject::moveToThread() ,但我不知道在这种情况下如何使用它。 OpenGL 的东西根本不包含任何与 Qt 相关的代码或函数。那么我该如何解决这个问题呢?

而且我也无法弄清楚某个 QThread始终使用相同的底层 native 线程。是这样吗?

最佳答案

这是一个 approach .您创建一个线程,只要您需要它就会存在,并向其中添加作业。您可以替换 QThread 或使用 std::thread。

关于c++ - 强制 OpenGL 渲染始终在 Qt 中的同一 (Q) 线程上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204905/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com