這涉及到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