【发布时间】:2011-12-07 21:42:41
【问题描述】:
所以,我有一个从一组文件加载数据的单线程应用程序:
QStringList qFiles = QFileDialog::getOpenFileNames(
this,
"Choose Image Files",
"",
"Dicom Files(*.dcm);;All Files(*)"
);
之后我调用一个库来解析文件集,因为库调用了 OpenGL 函数,所以我可能不会为此处理创建一个新线程。 完成此处理后,我注意到我的应用程序冻结了一段时间。
使用 GDB,我注意到我的 Qt 应用程序缓冲了很多事件,而库处理文件集,然后它正在处理这些事件。
我可能不会在库中调用 QApplication::instance()->processEvents(),因为它不知道 Qt(项目决策)。
有没有办法丢弃这些事件?或者有没有其他解决方案可以防止我的应用程序冻结?
【问题讨论】:
-
你有没有注意到这些是什么类型的事件?另外......虽然库可能不知道Qt......您是否可以将一个函数指针传递给它以进行回调 - 例如在每个文件之后?然后,您可以初始化库并传入一个函数,它调用该函数来进行事件处理(如果回调更有意义或一般有用,那就更好了)。
-
@HostileFork 查看堆栈跟踪:pastebin.com/VEma6KE7 看起来 glib 正在将最近访问的文件信息保存到磁盘。奇怪的是它做了很多次......
-
无法将 OpenGL 渲染移至单独线程的具体原因是什么?
标签: c++ qt event-handling