所以,我有一个单线程应用程序,它从一组文件中加载数据:
QStringList qFiles = QFileDialog::getOpenFileNames(
this,
"Choose Image Files",
"",
"Dicom Files(*.dcm);;All Files(*)"
);
之后我调用一个将解析文件集的库,因为库调用了OpenGL函数,我可能无法为此处理创建新线程。 完成此处理后,我注意到我的应用程序冻结了一段时间。
使用GDB我注意到我的Qt应用程序缓存了很多事件,而库处理了一组文件,然后处理这些事件。
我可能不会在libary中调用QApplication :: instance() - > processEvents(),因为它不知道Qt(项目决策)。
有没有办法丢弃这些事件?或者还有其他解决方案可以防止我的申请冻结吗?
答案 0 :(得分:1)
如果可能,将OpenGL渲染移动到单独的线程。然后你可以在那里调用你的库函数,而不用担心它们会阻塞事件队列。
您应该能够将帧缓冲区用于工作线程,并使用信号和插槽与其进行通信。
或者你可以看看该库是否有任何回调。如果您有可用的源,则可以在长时间运行期间实现自己的源。