Приложение виснет при больших данных

167
14 ноября 2018, 11:00

Да, допускаю, что сформулировал заголовок глупо.. Дело вот в чём, есть приложение, часть которого занимается поиском директорий и определённых фалйов в этих директориях. Часть кода с поиском директорий проходит успешно и быстро. Часть когда с поиском файлов работает в двух случаях: когда файлов мало, и когда много файлов проходит через отладчик.

То есть я почему и в замешательстве, я в процессе отладки "тыкая" по F5 могу подгрузить более 7 тысяч файлов. А когда абсолютно то же самое без отладки запускаю, висит и всё. При чём висит в самом начале (есть полоса прогресса).

Может сталкивался кто.. Вот код на всякий:

double progress_current = 0;
    ui->labelProgressBar->setText("Открытие файлов");
    for (QString &dir : dirList)
    {
        ui->progressBar->setValue((int)((progress_current++ / (double)dirList.size()) * (double)100));
        QDir export_folder(dir);
        export_folder.setNameFilters(QStringList() << "*.jpg" << "*.jpeg" << "*.png");
        QStringList tempFileList = export_folder.entryList();
        for (QString &file : tempFileList)
        {
            Photo temp(dir + '/' + file);
            photoList->push_back(temp);
        }
    }
    ui->progressBar->setValue(100);
    ui->labelProgressBar->setText("Файлы открыты");

Вот пруфы на всякий: 1. Во время запуски Realese 2. Во время отладки

Answer 1

У вас загрузка идет в основном потоке, вот гуй и не отвечает.

Короткий способ поправить - добавить в цикл после установки значения в progressBar строку

QApplication::processEvents();

Но это не феншуйно и фу. Правильный способ - выносить длинные задачи в отдельный поток и общаться с основным потоком сигналами.

READ ALSO
Ограничение доступа к интерфейсу DBus

Ограничение доступа к интерфейсу DBus

Начал изучать работу межпроцессного взаимодействия с помощью DBus в QtНачал с примера ping-pong

182
Неправильный вывод суммы матриц С++

Неправильный вывод суммы матриц С++

Начал повторять C++ и возникла проблема при суммировании матриц, что вывод 2-х матриц А и В нормальный, а при выводе матрицы А+В выходит вот что...

182