Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: jurtal от Апрель 01, 2010, 12:54



Название: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: jurtal от Апрель 01, 2010, 12:54
Столкнулся со следующей проблеммой.
Делаю по таймеру маунт и размаунт флешки (чтоб проверить воткнул ее пользователь или вытащил) . Когда она воткнута и я ее замаунтил, пытаюсь получить в другой функции список файлов в одной из папок на флешке (QFileInfoList QDir::entryInfoList). Проблема в том, что функция entryInfoList выполняется порядка минуты... Само собой UI висит и ждет, пока она отработает.  Есть у кого-нибудь понимание, что происходит?

void func()
{
QProcess umountproc;
umountproc.start("umount " + "/dev/sdc1");
umountproc.waitForFinished(500);
umountproc.close();

//
QProcess mountproc;
mountproc.start("mount -t vfat " + "/dev/sdc1" + " " + "/media");
mountproc.waitForFinished(500);
mountproc.close();
}



Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: Пантер от Апрель 01, 2010, 13:14
Может много файлов на флешке? Попробуй entryList.


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: jurtal от Апрель 01, 2010, 13:20
Даже если просто папка пустая - тоже долго...


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: Пантер от Апрель 01, 2010, 13:28
А из других приложений каталог открывается нормально или тоже с торможением? Имеется ввиду первая загрузка каталога.


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: jurtal от Апрель 01, 2010, 13:31
Именно первое обращение к каталогу на флешке очень долгое - второе и последующие быстро выполняются.


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: jurtal от Апрель 01, 2010, 13:32
Из других приложений попробую...


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: Пантер от Апрель 01, 2010, 13:39
Скорее всего, в других будет то же самое. Если так, то все нормально.


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: jurtal от Апрель 01, 2010, 13:52
Минута - думаю многовато  :).


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: crossly от Апрель 01, 2010, 14:42
думаю это время уходит на монтирование флэхи... если при последующих обращениях все ок... попробуй смонтировать в консоли и посмотреть как быстро происходит этот процесс...


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: jurtal от Апрель 01, 2010, 15:18
попробовал - долго происходит


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: BRE от Апрель 01, 2010, 15:22
попробовал - долго происходит
Ну так не "проверяй" таким образом воткнутость флешки.  :)
Куда лучше проверять присутствие нужной папки и если она есть, читать оттуда список файлов.
Это если не заморачиваться со всякими HAL...


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: crossly от Апрель 01, 2010, 15:46
попробовал - долго происходит
тогда не понятно каким боком тут qt... как ни крути он будет ждать пока флешка не примонтируется... мот все же стоит заморочится с hal для проверки наличия и монтирования...


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: jurtal от Апрель 01, 2010, 16:37
Неправильно отписал - само монтирование/размонтирование из консоли быстро выполняется. И из кода монтирование/размонтирование быстро. А вот когда после монтирования на флешку лезешь  с entryInfoList, вот тогда и тормозит.


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: jurtal от Апрель 01, 2010, 18:26
Содержимое папки смотрю так:

QDir currentFolder(sPath);
currentFolder.setFilter(QDir::Files | QDir::NoDotAndDotDot);

QFileInfoList fileInfoList(currentFolder.entryInfoList() );



Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: Пантер от Апрель 01, 2010, 18:35
Можно еще через QDirIterator.
Еще entryInfoList медленнее, чем entryList.


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: jurtal от Апрель 01, 2010, 18:41
Да пробовал уже и просто список файлов... тоже самое... Сделал тест когда маунт делаю с консоли а потом читаю данные из папки в программе... читает также долго.


Название: Re: Тормоза при использовании QProcess и QFileInfoList QDir::entryInfoList ( Filters
Отправлено: Пантер от Апрель 01, 2010, 18:53
Тогда не заморачивайся. Это уже зависит от перефирии и ОС.