Это касается C ++ (MinGW), Qt, Windows Vista:
- все это, пока я занимаюсь разработкой не-GUI-приложений на C ++.Недавно я решил попробовать графический интерфейс в Qt, и у меня возникли некоторые проблемы с дизайном.
Вот проблема:
- шаг 1: Загрузка и отображение фона GIF-анимации с использованием QMovie ...
- шаг2: обрабатывает огромные файлы дампа (более 2 ГБ) .... поэтому, когда я достиг шага 2, мой GUI как-то завис.
я использовал while (getline (inputFileStream,stringLine)) {...} поэтому я поместил QCoreApplication :: processEvents (); внутри цикла.
Приложение стало очень медленным.Поэтому я разместил счетчик, который будет выполняться только в том случае, если он достигнет определенного значения QCoreApplication :: processEvents (); .
Теперь анимация GIF стала больше похожа на серию кадров с видимым переходом от одного к другому.
Любой более быстрый запуск processEvents () замедляет работу приложения (что в любом случае близко к времени выполнения без использования графического интерфейса).
Как я вижу из диспетчера задач 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;
}