【发布时间】:2021-09-26 23:23:00
【问题描述】:
我有一个 C++ 中的 QT GUI 应用程序,旨在处理和生成二进制文件。
应用程序运行良好,但是当它进入处理和写入文件的 while 循环时,它看起来像被冻结了。
我通过将 qApp->processEvents(); 处理到 while 循环中来解决这个问题。但问题是生成文件需要更多时间:
-
在循环中没有
qApp->processEvents();=> 需要 4 秒 -
qApp->processEvents();在循环中 => 完全相同的文件需要 50 秒for (unsigned long int k=0; k<DATASIZE ; k++){ qApp->processEvents(); /* Some process*/ DataToFile.push_back(Process_Function(DATA)); } /*Generating file*/ myFile.write((char *)&DataToFile[0], DataToFile.size()*sizeof (float)); -
数百万左右的数据量
-
Process_Function:取特定数据,计算值并返回。
问题:
1- 有没有办法处理数据,生成文件而不被冻结,也没有qApp->processEvents(); 的巨大延迟
2- 是否可以在另一个线程中运行qApp->processEvents();? / 或者还有其他方法吗?
【问题讨论】:
-
使用后台线程生成文件;保持事件循环线程为事件打开。您可以使用信号报告进度信息。
标签: c++ qt user-interface