c++ - 长时间例程后的 Qt 事件卡住了我的应用程序一段时间

标签 c++ qt event-handling

所以,我有一个从一组文件加载数据的单线程应用程序:

QStringList qFiles = QFileDialog::getOpenFileNames(
    this,
    "Choose Image Files",
    "",
    "Dicom Files(*.dcm);;All Files(*)"
);

之后,我调用了一个库来解析文件集,因为该库调用了 OpenGL 函数,所以我可能不会为此处理创建一个新线程。 完成此处理后,我注意到我的应用程序卡住了一段时间。

使用 GDB 我注意到我的 Qt 应用程序缓冲了很多事件,而库处理了一组文件,然后它正在处理这些事件。

我可能不会在库中调用 QApplication::instance()->processEvents(),因为它不知道 Qt(项目决策)。

有没有办法丢弃这些事件?或者是否有任何其他解决方案可以防止我的应用程序卡住?

最佳答案

将 OpenGL 渲染移至工作线程

如果可能,将您的 OpenGL 渲染移动到一个单独的线程。然后您可以在那里调用您的库函数,而不必担心它们会阻塞事件队列。

您应该能够将您的帧缓冲区专用于工作线程并使用信号和槽与其通信。

备选方案:实现进度回调

或者,您可以查看该库是否有任何回调。如果您有可用的源代码,您可以在长时间运行的操作中实现自己的源代码。

关于c++ - 长时间例程后的 Qt 事件卡住了我的应用程序一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8422993/

相关文章:

C++ 函数类型

c++ - 无需单例即可将 QML 与 C++ 连接

c++ - iconv() - 如何确定输出缓冲区所需的大小?

javascript - 使用 JQuery .on() 函数为列表中的每个项目添加点击事件

c# - 你如何在 C# 中引发事件?

c++ - 重载运算符&& 和||创建一个保存动态逻辑的类

c++ - 如何编辑 Qvector 中 Qvector 的内容

linux - Qt 5.3.2 + TSlib : wrong touch coordinates

multithreading - 对于多线程视频教练程序来说,这是一个合适的结构吗?

javascript - 使用 onMouseover 更改 <div> 的颜色