这涉及到C++(MinGW的),Qt的,Windows Vista中:GUI设计问题
这一切,而我的开发非GUI的C++应用程序。最近我决定尝试在Qt中使用GUI,并且遇到一些设计问题。
这里的问题:
- 第1步:加载和显示用QMovie背景GIF动画...
- 第2步:过程中巨大的转储文件(超过2GB的)... 。所以,当我到达步骤2果然我的GUI愣..
我使用而(函数getline(inputFileStream,标线)){...}所以我放置QCoreApplication :: processEvents();在循环内。
应用程序变得非常慢。所以我放置了一个计数器,只有当它达到一个特定的值时才会执行QCoreApplication :: processEvents();执行。
现在gif动画已经变得更像是一系列可见的过渡帧。
任何更快的触发processEvents()减慢应用程序(无论如何,这远远不是非GUI执行时间附近)。
正如我从Windows任务管理器中看到的,一个内核具有较高的利用率,而另一个内核在执行期间很低。
那么我应该采取什么方法?我应该深入研究多线程(我以前从未使用过)?
剥离下来的一切来解释问题的程序是这样的:
class Animation;
class FileProcessing;
main(int argc,char** argv) {
QApplication* app=new QApplication(argc,argv);
QLabel* label1=new QLabel(...);
QLabel* label2=new QLabel(...);
Animation* objAnim=new Animation(...); //QMovie plays gif
objAnim->show();
//fileDialogs --> ask for files..this is modal so animation is fine till this point
FileProcessing* objFileProcessing=new FileProcessing(...);
objFileProcessing->processFiles(label1,label2); //process >2GB files
//in this i repeatedly call processEvents() as written above
//delete labels,objAnim and objFileProcessing;
delete app;
return 0;
}
你的问题是,你仍然阻塞UI线程(只是在每次迭代很短时才更新UI)。看到我的答案相关的问题:http://stackoverflow.com/questions/8300983/qt-programming-and-computations-which-take-long-time/8301442#8301442 – 2012-03-14 12:41:40
事实上,你的应用程序是非gui是一个巨大的优势,你不应该毁了。因为在使用线程时,Gui接口将在主接口中运行,而前一个应用中的功能将在其他线程中运行。 – UmNyobe 2012-03-14 12:46:23