Это относится к C++ (MinGW), Qt, Windows Vista:вопросы проектирования GUI с использованием C++, Qt на Windows (Vista)
все это время я развивающий не-GUI приложений в C++. Недавно я решил попробовать графический интерфейс в Qt, и у меня возникли некоторые проблемы с дизайном.
Вот проблема:
- шаг 1: Загрузка и отображение фона GIF анимация с использованием QMovie ...
- шаг 2: процесса огромные файлы дампа (более 2 Гб в) ... .so, когда я достиг шага 2 ожидаемо мой GUI заморозили ..
я использовал время (GetLine (inputFileStream, stringLine)) {...} так я размещено QCoreApplication :: processEvents(); внутри цикла.
Приложение стало очень медленным. Поэтому я поставил счетчик, который, только если он достигнет определенного значения, будет QCoreApplication :: processEvents();.
Теперь анимация gif стала больше похожа на ряд кадров с видимым переходом от одного к другому.
Любое быстрое срабатывание processEvents() замедляет приложение вниз (что в любом случае не приближается к времени выполнения без GUI).
Как я вижу из диспетчера задач Windows, одно ядро имеет высокий уровень использования, а другой - низкий во время выполнения.
Итак, какой подход я должен принять? Должен ли я вникать в 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;
}
Ваша проблема заключается в том, что вы по-прежнему блокирует поток пользовательского интерфейса (просто обновляя пользовательский интерфейс после каждой итерации, возможно только в том случае, если каждая итерация очень короткая). См. Мой ответ на соответствующий вопрос: http://stackoverflow.com/questions/8300983/qt-programming-and-computations-which-take-long-time/8301442#8301442 –
Тот факт, что ваше приложение было не-gui огромное преимущество, которое вы не должны разрушать. Потому что при использовании потоков интерфейс Gui будет работать в основном, а функции в предыдущем приложении будут работать в других потоках. – UmNyobe