Russian Qt Forum
Ноябрь 25, 2024, 15:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Самодельная корзинка  (Прочитано 3945 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Март 03, 2009, 04:05 »

Здравствуйте!


В своей программе хочу сделать самодельную "корзину", т.е. директрорию, куда складываются устаревшие версии всяких файлов. Для корзины хочу сделать ограничиващие настройки

- Максимальный размер корзины (например 10Мб)
- Максимальное число файлов в корзине (например 1000)

Вопрос. Как организовать "ограничивающую" работу с корзиной так, чтоб она не сильно влияла на работу программы? Ну, например

  • Проверять и прочищать корзину после каждого добавления файла мне представляется медленным делом, ибо подсчет количества файлов и подсчет суммарного объема файлов вещь достаточно тормознутая
  • Делать прочистку при старте/завершении программы тоже неправильно, ибо программа может работать в течении всего времени работы компа, и корзина может разрастись гораздо больше ее ограничений
  • Делать прочистку только каждого 10 (50, 100...) действия с корзиной тоже нехорошо, ибо работать с прогой будет неприятно (периодические тормоза никого не радуют)
  • По той же причине, делать прочистку по таймеру (каждые полчаса например) тоже неправильно, тормоза будут возникать в непредсказуемые моменты времени

А как сделать правильно?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 03, 2009, 07:29 »

Выноси в поток и не будет тормозов.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Март 03, 2009, 12:46 »

см. QFileSystemWatcher, вот только проблема с максимальным кол-вом файлов:

Цитировать
Note: The act of monitoring files and directories for modifications consumes system resources. This implies there is a limit to the number of files and directories your process can monitor simultaneously. On Mac OS and all BSD variants, for example, an open file descriptor is required for each monitored file. The system limits the number of open file descriptors to 256 by default. This means that addPath() and addPaths() will fail if your process tries to add more than 256 files or directories to the file system monitor. Also note that your process may have other file descriptors open in addition to the ones for files being monitored, and these other open descriptors also count in the total.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #3 : Март 03, 2009, 13:56 »

Выноси в поток и не будет тормозов.

Точно не будет?

А то я придумал такую схему - при старте программы проверяется директория корзины, запоминается список имен файлов, их дата и размер. Потом при работе программы в случае засовывания нового файла в корзину, инфа о нем добавляется в этот список, потом список проверяется на количество файлов и размер. Если что-то превышено - наиболее старые файлы удалятся и из списка и с диска. По идее, должно работать быстро.

А с потоками чую надолго программирование затянется, упарюсь глюки вычищать. Лучше затем, когда с потоками разберусь, описаный алгоритм в поток засунуть. Тогда будет работать максимально быстро.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Март 03, 2009, 17:39 »

Что-нибудь еще может лезть в этот каталог? Как вариант:
1. При первом запуске прога создает базу файлов.
2. При работе производится обновление базы, т.е. вставили физически файл, вставили его и в базу.
3. При закрытии база сохраняется.
4. При последующем открытии открывается база.
Если делать так, то даже без потоков тормозов не будет. Но если кто-нибудь еще может в этот каталог лезть.... Хотя, можно делать контрольные проверки, т.е. раз в день обновлять базу, пошуршав по каталогу. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 22.