これはC++(MinGWの)、Qtの、Windows Vistaの懸念:GUI設計の問題(ビスタ)
をすべてこの中には、私はC++で非GUIアプリケーションの開発です。最近私はQtでGUIを試してみることにしました。
- ステップ1:ロードとQMovieを使用して、背景のGIFアニメーションを表示...
- ステップ2:
は、ここで問題ですプロセス巨大なダンプファイル(2GBのオーバー)...私はステップ2に達したときの.so予想通り私のGUIが..
を凍結私は一方(のgetline(inputFileStream、STRINGLINE)){...}を使用していた私配置されたQCoreApplication :: processEvents();ループ内の。
アプリケーションが本当に遅くなりました。だから私はそれが特定の値に達する場合にのみカウンタを配置しましたQCoreApplication :: processEvents();を実行してください。
これで、gifアニメーションは、目に見えるように変化する一連のフレームのようになりました。
processEvents()のトリガーが速くなると、アプリケーションの実行が遅くなります(これは、GUI以外の実行時間に近づくことはありません)。
Windowsタスクマネージャーから見れば、1つのコアは高い稼働率を持ち、他のコアは実行期間中に低い状態です。
どうすればよいですか?私はmutithreading(私は前にそれを使用したことはない)に掘り下げなければならない?あなたは、処理ステップのために別のスレッドを使用する必要が
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 –
あなたのアプリが非GUIであったという事実はあなたが崩壊してはならない大きな利点です。スレッドを使用すると、Guiインターフェイスはメインアプリケーションで実行されますが、以前のアプリケーションの機能は他のスレッドで実行されるためです。 – UmNyobe