Добрый день, подскажите, пожалуйста, что делать, если программа виснет, когда

с помощью qdiriterator пробегаешься по всем папкам и просто выводишь название каждого файла?

Взял пример из документации:

QDirIterator it("/sys", QStringList() << "scaling_cur_freq", QDir::NoFilter, QDirIterator::Subdirectories);
while (it.hasNext()) {
QFile f(it.next());

qDebug() << f.fileName();
}

Если файлов мало, то не успевает зависнуть, а если много, то всё - капец, беда
Неужели как-то потоки подключать? Спасибо заранее

20 ответов

35 просмотров

Тебе многопоточность нужна. Собираешь данные в массив а по окончанию возвращаешь данные. Можно использовать QtConcurrent::run и QFuture

это не название каждого файла, а уже целый readAll с открыванием

BV-Багров Автор вопроса
Mr.Mait
Тебе многопоточность нужна. Собираешь данные в мас...

Вопрос в том, как run использовать? Непосредственно в QDiriterator?

BV Багров
Вопрос в том, как run использовать? Непосредственн...

По идее у тебя не должно тормозить после исправления. В run запускаешь функцию с файлами

BV Багров
Вопрос в том, как run использовать? Непосредственн...

положить этот приведённый выше фрагмент в run. или в QThread::create

BV Багров
Исправил )

там в итераторе вроде QFileInfo был. с ним быстрее брать имя, размер итп. без QFile дополнительного

BV-Багров Автор вопроса
Suigintou45 E14
там в итераторе вроде QFileInfo был. с ним быстре...

Спасибо @Suigintou45 @mr_mait Сейчас попробую, отпишусь

Suigintou45 E14
там в итераторе вроде QFileInfo был. с ним быстре...

Да, поддерживаю. Там еще можно узнать директория или файл и посмотреть имя файла не открывая его

Выводить в цикле уже не правильно, хотя бы через сигнал слот, какая никакая асинхронность будет

BV-Багров Автор вопроса
Bril
Выводить в цикле уже не правильно, хотя бы через с...

@mr_mait @Suigintou45 насколько я понимаю громоздкие операции вообще не засовывать в qdiriterator? Максимум скопировать все имена в файлов в QList и затем уже над этими строками работать?

BV Багров
@mr_mait @Suigintou45 насколько я понимаю громоз...

ну лучше сканировать ФС один раз, да

BV-Багров Автор вопроса
Suigintou45 E14
ну лучше сканировать ФС один раз, да

Подскажите, пожалуйста, если не трудно ) Допустим, я засунул тяжёлую операцию в qdiriterator (она сопровождается progressBar’ом), а потом пишу сообщение о том, что операция закончена и название файла, над которым она закончена. В итоге при запуске у меня сначала выводятся все сообщения о завершении операции. А потом начинает крутиться progressBar и обрабатываться файлы. Это опять что-то с потоками? Сделал moveToThread для объекта класса, в котором тяжёлая функция выполняется, чтобы интерфейс не вис. Спасибо!

BV Багров
Подскажите, пожалуйста, если не трудно ) Допустим,...

Да, если у вас обработка прогресса происходит в слоте или в потоке

BV-Багров Автор вопроса
DI
Да, если у вас обработка прогресса происходит в сл...

В одном потоке (гуишном) происходит вывод, а в другом обработка - Вы это хотите сказать?

BV Багров
В одном потоке (гуишном) происходит вывод, а в дру...

Да. Слот - это создание нового потока или что то похожее

BV Багров
Подскажите, пожалуйста, если не трудно ) Допустим,...

каким образом сделана связь из потока, с сообщениями и с прогресс-баром?

BV-Багров Автор вопроса
Suigintou45 E14
каким образом сделана связь из потока, с сообщения...

Никаким) Сделана связь между прогрессбаром и процессом обработки

BV Багров
Никаким) Сделана связь между прогрессбаром и проце...

я про то, как поток обновляет gui. напрямую низя

Suigintou45 E14
я про то, как поток обновляет gui. напрямую низя

Если в поток передать сам интерфейс, то вполне возможно

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта